Пример #1
0
int StartUpServer(unsigned int ServerPort)
{
	int sockfd = MakeSocket(ServerPort);
	int nfds = sockfd + 1;
	int newsockfd;
	
	struct sockaddr_in addr;
	socklen_t size = sizeof(addr);
	
	fd_set master;
	fd_set readfds;
	
	fprintf(stdout, "Listening on port %d.\n\n", ServerPort);
	
	FD_ZERO(&master);
	FD_SET(sockfd, &master);
	
	while(1)
	{
		readfds = master;
		/*Monitor sockets*/
		if(select(nfds, &readfds, NULL, NULL, NULL) < 0)
		{
			fprintf(stderr, "error: Fail to select\n");
			exit(1);
		}
		
		/*Get a socket*/
		if (FD_ISSET(sockfd, &readfds))
		{
			newsockfd = accept(sockfd, (struct sockaddr *) &addr, &size);
			
			if(newsockfd < 0)
			{
				fprintf(stderr, "error: Fail to get newsockfd\n");
				exit(1);
			}
			
			FD_SET(newsockfd, &master);
		}
	}

	return 0;
}
Пример #2
0
BOOL TRAFFIC_MONITOR(char *server, int port, char *community, int ifindex, 
					 int timeout, int retrydelay, CString strMonitorID, 
					 char *custpath, char *szReturn)
{
	int s;
	struct sockaddr_in serv;

	int		i = 0, ret = 0;
	int		count = 1;
	struct	snval *ptmp = NULL;
	struct	snval *ptmpnext = NULL;

	long	ifOperStatus = 0;
	Gauge	ifSpeed = 0;
	Counter ifInOctets = 0, ifOutOctets = 0;
	Counter ifInErrors = 0, ifOutErrors = 0;

	if((ret = MakeSocket(server, port, s, serv)) < 0)
	{
		if(ret == -1)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_Traffic_1%>"));
		else if(ret == -2)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_Traffic_2%>"));
		else
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_Traffic_3%>"));

		return FALSE;
	}

	struct oid *poid = NULL, *ptmpoid = NULL;
	oid ifInOctets_oid = {{0x2b, 6, 1, 2, 1, 2, 2, 1, 10}, 9};
	oid ifOutOctets_oid = {{0x2b, 6, 1, 2, 1, 2, 2, 1, 16}, 9};
	ifInOctets_oid.id[ifInOctets_oid.len++] = ifindex;
	poid = ptmpoid = &ifInOctets_oid;
	ifOutOctets_oid.id[ifOutOctets_oid.len++] = ifindex;
	ptmpoid->next = &ifOutOctets_oid;
	ptmpoid = ptmpoid->next;

	struct snval *psnval = NULL;
	if((ret = SN_VALUES(s, serv, community, 1, poid, &psnval)) < 0)
	{
		if(ret == -1)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_Dynamo_4%>"));//<%IDS_Dynamo_4%>
		else if(ret == -2)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_Dynamo_5%>"));//<%IDS_Dynamo_5%>
		else if(ret == -3)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_Dynamo_6%>"));//<%IDS_Dynamo_6%>
		else if(ret == -4)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_Dynamo_7%>"));//<%IDS_Dynamo_7%>
		else if(ret == -5)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_Dynamo_8%>"));//<%IDS_Dynamo_8%>
		else if(ret == -6)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_Dynamo_9%>"));//<%IDS_Dynamo_9%>
		else if(ret == -7)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_Dynamo_10%>"));//<%IDS_Dynamo_10%>
		else if(ret == -8)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_Dynamo_11%>"));//<%IDS_Dynamo_11%>
		else
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_Dynamo_12%>"));//<%IDS_Dynamo_12%>

		goto w;
	}

	ptmp = psnval;
	ptmpnext = NULL;
	while(ptmp)
	{
		switch(count)
		{
		case 1:
			switch(ptmp->sv_type)
			{
			case ASN1_INT:
			case ASN1_COUNTER:
			case ASN1_GAUGE:
			case ASN1_TIMETICKS:
			case ASN1_COUNTER64:
			case ASN1_UINTEGER32:
				ifInOctets = ptmp->sv_val.sv_int;
				break;
			default:
				ifInOctets = 0;
				break;
			}
			break;
		case 2:
			switch(ptmp->sv_type)
			{
			case ASN1_INT:
			case ASN1_COUNTER:
			case ASN1_GAUGE:
			case ASN1_TIMETICKS:
			case ASN1_COUNTER64:
			case ASN1_UINTEGER32:
				ifOutOctets = ptmp->sv_val.sv_int;
				break;
			default:
				ifOutOctets = 0;
				break;
			}
			break;
		}
		count ++;
		ptmp = ptmp->next;
	}

	// computer the traffic 
	{
	char ciniFile[256] = {0}, 
		 cinifile[256] = {0};
	char cifIndex[256] = {0};
	sprintf(cinifile, "snmp_%s_%s.ini", server, strMonitorID);
	sprintf(ciniFile, "%s\\%s", custpath, cinifile);
	sprintf(cifIndex, "ifIndex_%ld", ifindex);

	long	ifTime = 0;
	Counter inOctets = 0, outOctets = 0;

	CTime curTime = CTime::GetCurrentTime();

	ifTime = DFN_GetPrivateProfileInt(cifIndex, "ifTime", -99, ciniFile);
	inOctets = DFN_GetPrivateProfileInt(cifIndex, "ifInOctets", -99, ciniFile);
	outOctets = DFN_GetPrivateProfileInt(cifIndex, "ifOutOctets", -99, ciniFile);

	if(ifTime == -99 || inOctets == -99 || outOctets == -99)
	{
		CString strSection = _T("");
		strSection.Format("ifIndex_%ld", ifindex);

		curTime = CTime::GetCurrentTime();
		CString strMsg = _T("");
		strMsg.Format("%ld", curTime.GetTime());
		::DFN_WritePrivateProfileString((LPCTSTR)strSection, "ifTime", (LPCTSTR)strMsg, ciniFile);

		strMsg.Format("%ld", ifInOctets);
		::DFN_WritePrivateProfileString((LPCTSTR)strSection, "ifInOctets", (LPCTSTR)strMsg, ciniFile);
		strMsg.Format("%ld", ifOutOctets);
		::DFN_WritePrivateProfileString((LPCTSTR)strSection, "ifOutOctets", (LPCTSTR)strMsg, ciniFile);
		WriteLogFile(strMonitorID, "读配置文件失败");
	}
	else
	{
		float ifInOctetsRate = 0.0, ifOutOctetsRate = 0.0;
		Counter	InOctets = 0, OutOctets = 0;

		CTime bTime(ifTime);
		curTime = CTime::GetCurrentTime();
		CTimeSpan spanTime = curTime - bTime;
		long lInterval = spanTime.GetTotalSeconds();
		
		if(lInterval == 0) lInterval = 1;
		if(lInterval <= 12 * 60 * 60 && lInterval >= 0)
		{
			InOctets = (unsigned int)(ifInOctets - inOctets < 0 ? (COUNTER_MAX - inOctets + ifInOctets) : (ifInOctets - inOctets));
			//ifInOctetsRate = (float)InOctets / lInterval;
			//k
			ifInOctetsRate = (float)InOctets / lInterval/1024;

			OutOctets = (unsigned int)(ifOutOctets - outOctets < 0 ? (COUNTER_MAX - outOctets + ifOutOctets) : (ifOutOctets - outOctets));
			// wang peng /1024 =k
            //Edit By Kevin.Yang PM: 14:55 2004.10.21
            //Reason: 根据张鹏所提供的资料目前Cisio的MIF库中单位为KB,因此在
            //得到的数据后不再需要除以1024
			ifOutOctetsRate = (float)OutOctets / lInterval /1024;
			//ifOutOctetsRate = (float)OutOctets / lInterval;

			sprintf(szReturn, 
					"ifIndex=%ld$ifInOctetsRate=%.2f$ifOutOctetsRate=%.2f$",
					ifindex, 
					ifInOctetsRate * 8, 
					ifOutOctetsRate * 8);
		}
		else
		{
			CString strLog;
			strLog.Format("时间总秒数%d", lInterval);
//			WriteLogFile(strMonitorID, strLog);		
		}
//		WriteLogFile(strMonitorID, szReturn);
		//if(strlen(szReturn) == 0)
		//{
		//	printf("%d年%d月%d日 %d时%d分%d秒 \n%d年%d月%d日 %d时%d分%d秒 \n",
		//		curTime.GetYear(), curTime.GetMonth(), curTime.GetDay(), 
		//		curTime.GetHour(), curTime.GetMinute(), curTime.GetSecond(),
		//		bTime.GetYear(), bTime.GetMonth(), bTime.GetDay(),
		//		bTime.GetHour(), bTime.GetMinute(), bTime.GetSecond());
		//}
		char buff[256] = {0};
		memset(buff, 0, 256);
		ltoa(curTime.GetTime(), buff, 10);
		DFN_WritePrivateProfileString(cifIndex, "ifTime", buff, ciniFile);
		memset(buff, 0, 256);
		ltoa(ifInOctets, buff, 10);
		DFN_WritePrivateProfileString(cifIndex, "ifInOctets", buff, ciniFile);
		memset(buff, 0, 256);
		ltoa(ifOutOctets, buff, 10);
		DFN_WritePrivateProfileString(cifIndex, "ifOutOctets", buff, ciniFile);
	}
	}

w:	ptmp = psnval;
	if(ptmp) ptmpnext = ptmp->next;
	while(ptmp)
	{
		free(ptmp);
		ptmp = ptmpnext;
		if(ptmp) ptmpnext = ptmp->next;
	}

	return !ret;
}
Пример #3
0
BOOL CTRONSSRCPU_MONITOR(char *server, int port, char *community, int rdelay, 
						 int timeout, char *cpath, char *szReturn)
{
	int		s;
	struct	sockaddr_in serv;

	int		ret = 0;
	BOOL	bResult = TRUE;
	struct	oid *poid = NULL, *proid = NULL;
	struct	snval *psnval = NULL;

	*szReturn = 0;

	if((ret = MakeSocket(server, port, s, serv)) < 0)
	{
		if(ret == -1)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_CheckPoint_1%>"));//<%IDS_CheckPoint_1%>
		else if(ret == -2)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_CheckPoint_2%>"));//<%IDS_CheckPoint_2%>
		else
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_CheckPoint_3%>"));//<%IDS_CheckPoint_3%>

		return FALSE;
	}

	poid = (struct oid *)malloc(sizeof(struct oid));
	proid = (struct oid *)malloc(sizeof(struct oid));
	psnval = (struct snval *)malloc(sizeof(struct snval));
	if(poid == NULL || proid == NULL || psnval == NULL)
	{
		bResult = FALSE;
		sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_CTRON_01%>"));	// 内存溢出错误
		goto err;
	}

	memset(poid, 0, sizeof(struct oid));
	memset(proid, 0, sizeof(struct oid));
	memset(psnval, 0, sizeof(struct snval));

	memcpy(poid, &capCPUTable, sizeof(struct oid));
	while(SN_NEXT_VALUE(s, serv, community, 1, poid, proid, psnval) == 0)
	{
		if(compare_oid(*proid, capCPUCurrentUtilization) || psnval->sv_type != ASN1_INT ||
					psnval->sv_val.sv_int > 100 || psnval->sv_val.sv_int < 0)
		{
			break;
		}

		sprintf(szReturn, "%sUtilization=%d$", szReturn, psnval->sv_val.sv_int);

		memcpy(poid, proid, sizeof(struct oid));
		memset(proid, 0, sizeof(struct oid));
		memset(psnval, 0, sizeof(struct snval));
	}

	if(!*szReturn)
	{
		bResult = FALSE;
		sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_CTRON_02%>"));	// 设备无此性能参数
	}

err:
	if(poid) { free(poid); poid = NULL; }
	if(proid) { free(proid); proid = NULL; }
	if(psnval) { free(psnval); psnval = NULL; }
	
	return bResult;
}
Пример #4
0
BOOL CTRONETHERSTATUS_MONITOR(char *server, int port, char *community, CString strIndex, 
			int rdelay, int timeout, int ngid, int nmid, char *cpath, char *szReturn)
{
	int		s;
	struct	sockaddr_in serv;

	int		i = 0, j = 0, ret = 0;
	int		count = 1;
	struct	snval *ptmp = NULL;
	struct	snval *ptmpnext = NULL;

	u_int	_64Octets = 0, _65to127Octets = 0;
	u_int	_Curr64Octets = 0, _Curr65to127Octets = 0;

	if((ret = MakeSocket(server, port, s, serv)) < 0)
	{
		if(ret == -1)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_CheckPoint_1%>"));//<%IDS_CheckPoint_1%>
		else if(ret == -2)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_CheckPoint_2%>"));//<%IDS_CheckPoint_2%>
		else
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_CheckPoint_3%>"));//<%IDS_CheckPoint_3%>

		return FALSE;
	}

	long index_id[32];
	int	 index_id_c = 0;
	while(1)
	{
		i = strIndex.Find('.', 0);
		if(i > 0)
			index_id[index_id_c++] = atoi(strIndex);
		else if(i < 0 && strIndex.GetLength() > 0)
		{
			index_id[index_id_c++] = atoi(strIndex);
			break;
		}
		else
			break;

		strIndex.Delete(0, i + 1);
	}

	for(i = 0;i < index_id_c;i ++)
	{
		etherStatsPkts64Octets.id[etherStatsPkts64Octets.len++] = index_id[i];
		etherStatsPkts65to127Octets.id[etherStatsPkts65to127Octets.len ++] = index_id[i];
	}

	struct oid *poid = NULL, *ptmpoid = NULL;
	poid = ptmpoid = &etherStatsPkts64Octets;
	ptmpoid->next = &etherStatsPkts65to127Octets;
	ptmpoid = ptmpoid->next;

	struct snval *psnval = NULL;
	if((ret = SN_VALUES(s, serv, community, 1, poid, &psnval)) < 0)
	{
		if(ret == -1)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_CheckPoint_4%>"));//<%IDS_CheckPoint_4%>
		else if(ret == -2)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_CheckPoint_5%>"));//<%IDS_CheckPoint_5%>
		else if(ret == -3)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_CheckPoint_6%>"));//<%IDS_CheckPoint_6%>
		else if(ret == -4)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_CheckPoint_7%>"));//<%IDS_CheckPoint_7%>
		else if(ret == -5)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_CheckPoint_8%>"));//<%IDS_CheckPoint_8%>
		else if(ret == -6)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_CheckPoint_9%>"));//<%IDS_CheckPoint_9%>
		else if(ret == -7)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_CheckPoint_10%>"));//<%IDS_CheckPoint_10%>
		else if(ret == -8)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_CheckPoint_11%>"));//<%IDS_CheckPoint_11%>
		else
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_CheckPoint_12%>"));//<%IDS_CheckPoint_12%>

		goto w;
	}

	_Curr64Octets = psnval->sv_val.sv_int;
	_Curr65to127Octets = psnval->next->sv_val.sv_int;

	{
	char ciniFile[256] = {0}, 
		 cinifile[256] = {0};
	char cifIndex[256] = {0};
	sprintf(cinifile, "ctron_%s_%d_%d.ini", server, ngid, nmid);
	sprintf(ciniFile, "%s\\%s", cpath, cinifile);
	sprintf(cifIndex, "ifIndex_%s", strIndex);

	long	ifTime = 0;
	CTime	curTime = CTime::GetCurrentTime();

	ifTime = DFN_GetPrivateProfileInt(cifIndex, "ifTime", 0, ciniFile);
	_64Octets = DFN_GetPrivateProfileInt(cifIndex, "_64Octets", 0, ciniFile);
	_65to127Octets = DFN_GetPrivateProfileInt(cifIndex, "_65to127Octets", 0, ciniFile);

	if(ifTime == 0 && _64Octets == 0 && _65to127Octets == 0)
	{
		CString strSection = _T("");
		strSection.Format("ifIndex_%s", strIndex);

		CString strMsg = _T("");
		strMsg.Format("%ld", curTime.GetTime());
		::DFN_WritePrivateProfileString((LPCTSTR)strSection, "ifTime", (LPCTSTR)strMsg, ciniFile);

		strMsg.Format("%ld", _Curr64Octets);
		::DFN_WritePrivateProfileString((LPCTSTR)strSection, "_64Octets", (LPCTSTR)strMsg, ciniFile);

		strMsg.Format("%ld", _Curr65to127Octets);
		::DFN_WritePrivateProfileString((LPCTSTR)strSection, "_65to127Octets", (LPCTSTR)strMsg, ciniFile);
	}
	else
	{
		float	_Rate64Octets = 0.0, _Rate65to127Octets = 0.0;
		Counter	_Delta64Octets = 0, _Delta65to127Octets = 0;

		CTime bTime(ifTime);
		CTimeSpan spanTime = curTime - bTime;
		long lInterval = spanTime.GetTotalSeconds();
		
		if(lInterval == 0) lInterval = 1;
		if(lInterval <= 12 * 60 * 60 && lInterval > 0)
		{
			_Delta64Octets = (unsigned int)(_Curr64Octets - _64Octets < 0 ? (COUNTER_MAX - _64Octets + _Curr64Octets) : (_Curr64Octets - _64Octets));
			_Rate64Octets = (float)_Delta64Octets / lInterval;

			_Delta65to127Octets = (unsigned int)(_Curr65to127Octets - _65to127Octets < 0 ? (COUNTER_MAX - _65to127Octets + _Curr65to127Octets) : (_Curr65to127Octets - _65to127Octets));
			_Rate65to127Octets = (float)_Delta65to127Octets / lInterval;

			sprintf(szReturn, "_Rate64Octets=%.2f$_Rate65to127Octets=%.2f$",
					_Rate64Octets, _Rate65to127Octets);
		}

		char buff[256] = {0};
		memset(buff, 0, 256);
		ltoa(curTime.GetTime(), buff, 10);
		DFN_WritePrivateProfileString(cifIndex, "ifTime", buff, ciniFile);
		memset(buff, 0, 256);
		ltoa(_Curr64Octets, buff, 10);
		DFN_WritePrivateProfileString(cifIndex, "_64Octets", buff, ciniFile);
		memset(buff, 0, 256);
		ltoa(_Curr65to127Octets, buff, 10);
		DFN_WritePrivateProfileString(cifIndex, "_65to127Octets", buff, ciniFile);
	}
	}

w:	ptmp = psnval;
	if(ptmp) ptmpnext = ptmp->next;
	while(ptmp)
	{
		free(ptmp);
		ptmp = ptmpnext;
		if(ptmp) ptmpnext = ptmp->next;
	}

	return !ret;
}
Пример #5
0
BOOL CtronEtherIndexs(char *server, int port, char *community, int rdelay, 
					  int timeout, char *cpath, CString &strBuffer)
{
	int		s;
	struct	sockaddr_in serv;

	int		nEther = 0;
	int		nEthers[256] = {0};
	struct	oid nEtherDs[256];
	int		nIfIndex[256] = {0};
	char	IfDescr[256][64] = {0};

	BOOL	bResult = TRUE;
	int		i = 0;
	struct	oid *poid = NULL, *proid = NULL;
	struct	snval *psnval = NULL;

	strBuffer = _T("");

	if(MakeSocket(server, port, s, serv) < 0)
	{
		return FALSE;
	}

	poid = (struct oid *)malloc(sizeof(struct oid));
	proid = (struct oid *)malloc(sizeof(struct oid));
	psnval = (struct snval *)malloc(sizeof(struct snval));
	if(poid == NULL || proid == NULL || psnval == NULL)
	{
		bResult = FALSE;
		goto err;
	}

	memcpy(poid, &etherStatsTable, sizeof(struct oid));
	memset(proid, 0, sizeof(struct oid));
	memset(psnval, 0, sizeof(struct snval));

	// Get Rmon Index
	while(SN_NEXT_VALUE(s, serv, community, 1, poid, proid, psnval) == 0)
	{
		if(compare_oid(*proid, etherStatsIndex) || psnval->sv_type != ASN1_INT)
		{
			break;
		}
		
		nEthers[nEther ++] = psnval->sv_val.sv_int;
		if(nEther >= 256)
		{
			break;
		}

		memcpy(poid, proid, sizeof(struct oid));
		memset(proid, 0, sizeof(struct oid));
		memset(psnval, 0, sizeof(struct snval));
	}

	if(nEther == 0)
	{
		bResult = FALSE;
		goto err;
	}

	// Get Rmon Data Source
	for(i = 0;i < nEther;i ++)
	{
		struct oid ds = etherStatsDataSource;
		ds.id[ds.len ++] = nEthers[i];

		memset(psnval, 0, sizeof(struct snval));
		if(SN_VALUE(s, serv, community, 1, &ds, psnval) < 0)
		{
			bResult = FALSE;
			goto err;
		}

		if(psnval->sv_type != ASN1_OBJID)
		{
			bResult = FALSE;
			goto err;
		}

		nEtherDs[i] = psnval->sv_val.sv_oid;
	}

	// Get Interface Index
	for(i = 0;i < nEther;i ++)
	{
		memset(psnval, 0, sizeof(struct snval));
		if(SN_VALUE(s, serv, community, 1, &nEtherDs[i], psnval) < 0)
		{
			bResult = FALSE;
			goto err;
		}

		if(psnval->sv_type != ASN1_INT)
		{
			bResult = FALSE;
			goto err;
		}

		nIfIndex[i] = psnval->sv_val.sv_int;
	}

	// Get Interface Description
	for(i = 0;i < nEther;i ++)
	{
		struct oid descr = ifDescr;
		descr.id[descr.len ++] = nIfIndex[i];

		memset(psnval, 0, sizeof(struct snval));
		if(SN_VALUE(s, serv, community, 1, &descr, psnval) < 0)
		{
			bResult = FALSE;
			goto err;
		}

		if(psnval->sv_type != ASN1_OCTSTR)
		{
			bResult = FALSE;
			goto err;
		}

		strncpy(IfDescr[i], psnval->sv_val.sv_str.sv_str, psnval->sv_val.sv_str.sv_len);
	}

	// Organize Output
	for(i = 0;i < nEther;i ++)
	{
		char szBuffer[1024] = {0};
		sprintf(szBuffer, "%s%d###%s###$$$", szBuffer, nEthers[i], IfDescr[i]);
		strBuffer += szBuffer;
	}

err:
	if(poid) { free(poid); poid = NULL; }
	if(proid) { free(proid); proid = NULL; }
	if(psnval) { free(psnval); psnval = NULL; }

	return bResult;
}
Пример #6
0
BOOL SNMP_MONITOR(char *server, int port, char *object, char *community, int timeout, 
				  int retrydelay, char *match, char *custpath, char *szReturn)
{
	int s, ret = 0;
	struct sockaddr_in serv;

	if((ret = MakeSocket(server, port, s, serv)) < 0)
	{
		if(ret == -1)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_SNMP_1%>"));    // <%IDS_SNMP_1%>
		else if(ret == -2)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_SNMP_2%>"));      //  <%IDS_SNMP_2%>
		else
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_SNMP_3%>"));        //  <%IDS_SNMP_3%>

		return FALSE;
	}

	struct oid *oidp = VerifyObject(object);
	if(!oidp)
	{
		sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_SNMP_4%>"));         //  <%IDS_SNMP_4%>
		return FALSE;
	}

	struct snval snval;
	if((ret = SN_VALUE(s, serv, community, 1, oidp, &snval)) < 0)
	{
		if(ret == -1)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_SNMP_5%>"));      //  <%IDS_SNMP_5%>
		else if(ret == -2)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_SNMP_6%>"));   //  <%IDS_SNMP_6%>
		else if(ret == -3)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_SNMP_7%>"));     //  <%IDS_SNMP_7%>
		else if(ret == -4)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_SNMP_8%>"));      //  <%IDS_SNMP_8%>
		else if(ret == -5)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_SNMP_9%>"));      //  <%IDS_SNMP_9%>
		else if(ret == -6)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_SNMP_10%>"));       //  <%IDS_SNMP_10%>
		else if(ret == -7)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_SNMP_11%>"));    //  <%IDS_SNMP_11%>
		else if(ret == -8)
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_SNMP_12%>"));     //  <%IDS_SNMP_12%>
		else
			sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_SNMP_13%>"));      //  <%IDS_SNMP_13%>

		if(oidp) free(oidp);
		return FALSE;
	}

	int i = 0;
	switch(snval.sv_type)
	{
	case ASN1_INT:
		switch(oidp->type)
		{
		case DFF1_IFTYPE:
			{
			char *iftype = NULL;
			iftype =	snval.sv_val.sv_int == 1 ? "other" : 
						snval.sv_val.sv_int == 2 ? "regular1822" :
						snval.sv_val.sv_int == 3 ? "hdh1822":
						snval.sv_val.sv_int == 4 ? "ddn-x25":
						snval.sv_val.sv_int == 5 ? "rfc877-x25":
						snval.sv_val.sv_int == 6 ? "ethernet-csmacd":
						snval.sv_val.sv_int == 7 ? "iso88023-csmacd":
						snval.sv_val.sv_int == 8 ? "iso88024-tokenBus":
						snval.sv_val.sv_int == 9 ? "iso88025-tokenRing":
						snval.sv_val.sv_int == 10 ? "iso88026-man":
						snval.sv_val.sv_int == 11? "starLan":
						snval.sv_val.sv_int == 12 ? "proteon-10Mbit":
						snval.sv_val.sv_int == 13 ? "proteon-80Mbit":
						snval.sv_val.sv_int == 14 ? "hyperchannel":
						snval.sv_val.sv_int == 15 ? "fddi":
						snval.sv_val.sv_int == 16 ? "lapb":
						snval.sv_val.sv_int == 17 ? "sdlc":
						snval.sv_val.sv_int == 18 ? "ds1":
						snval.sv_val.sv_int == 19 ? "e1":
						snval.sv_val.sv_int == 20 ? "basicISDN":
						snval.sv_val.sv_int == 21 ? "primaryISDN":
						snval.sv_val.sv_int == 22 ? "propPointToPointSerial":
						snval.sv_val.sv_int == 23 ? "ppp":
						snval.sv_val.sv_int == 24 ? "softwareLoopback":
						snval.sv_val.sv_int == 25 ? "eon":
						snval.sv_val.sv_int == 26 ? "ethernet-3Mbit":
						snval.sv_val.sv_int == 27 ? "nsip":
						snval.sv_val.sv_int == 28 ? "slip":
						snval.sv_val.sv_int == 29 ? "ultra":
						snval.sv_val.sv_int == 30 ? "ds3":
						snval.sv_val.sv_int == 31 ? "sip":
						snval.sv_val.sv_int == 32 ? "frame-relay": "unknown";

			//sprintf(szReturn, "%s=%s###%ld$", oidp->name, iftype, snval.sv_val.sv_int);
			sprintf(szReturn, "value=%ld$", snval.sv_val.sv_int);
			}
			break;
		case DFF1_ADMINSTATUS:
			{
			char *adminstatus = NULL;
			adminstatus =	snval.sv_val.sv_int == 1 ? "up" :
							snval.sv_val.sv_int == 2 ? "down" :
							snval.sv_val.sv_int == 3 ? "testing" : "unknown";

			//sprintf(szReturn, "%s=%s###%ld$", oidp->name, adminstatus, snval.sv_val.sv_int);
			sprintf(szReturn, "value=%ld$", snval.sv_val.sv_int);
			}
			break;
		case DFF1_OPERSTATUS:
			{
			char *operstatus = NULL;
			operstatus =	snval.sv_val.sv_int == 1 ? "up" :
							snval.sv_val.sv_int == 2 ? "down" :
							snval.sv_val.sv_int == 3 ? "testing" : "unknown";

			//sprintf(szReturn, "%s=%s###%ld$", oidp->name, operstatus, snval.sv_val.sv_int);
			sprintf(szReturn, "value=%ld$", snval.sv_val.sv_int);
			}
			break;
		case DFF1_IPFORWARDING:
			{
			char *forward = NULL;
			forward =	snval.sv_val.sv_int == 1 ? "forwarding" :
						snval.sv_val.sv_int == 2 ? "not-forwarding" : "unknown";

			//sprintf(szReturn, "%s=%s###%ld$", oidp->name, forward, snval.sv_val.sv_int);
			sprintf(szReturn, "value=%ld$", snval.sv_val.sv_int);
			}
			break;
		case DFF1_IPROUTETYPE:
			{
			char *routetype = NULL;
			routetype =	snval.sv_val.sv_int == 1 ? "other" : 
						snval.sv_val.sv_int == 2 ? "invalid" : 
						snval.sv_val.sv_int == 3 ? "direct" : 
						snval.sv_val.sv_int == 4 ? "indirect" : "unknown";

			//sprintf(szReturn, "%s=%s###%ld$", oidp->name, routetype, snval.sv_val.sv_int);
			sprintf(szReturn, "value=%ld$", snval.sv_val.sv_int);
			}
			break;
		case DFF1_IPROUTEPROTO:
			{
			char *routeproto = NULL;
			routeproto =	snval.sv_val.sv_int == 1 ? "other" : 
							snval.sv_val.sv_int == 2 ? "local" : 
							snval.sv_val.sv_int == 3 ? "netmgmt" : 
							snval.sv_val.sv_int == 4 ? "icmp" : 
							snval.sv_val.sv_int == 5 ? "egp" : 
							snval.sv_val.sv_int == 6 ? "ggp" : 
							snval.sv_val.sv_int == 7 ? "hello" : 
							snval.sv_val.sv_int == 8 ? "rip" : 
							snval.sv_val.sv_int == 9 ? "is-is" : 
							snval.sv_val.sv_int == 10 ? "es-is" : 
							snval.sv_val.sv_int == 11 ? "ciscoIgrp" : 
							snval.sv_val.sv_int == 12 ? "bbnSpfIgp" : 
							snval.sv_val.sv_int == 13 ? "ospf" : 
							snval.sv_val.sv_int == 14 ? "bgp" : "unknown";

			//sprintf(szReturn, "%s=%s###%ld$", oidp->name, routeproto, snval.sv_val.sv_int);
			sprintf(szReturn, "value=%ld$", snval.sv_val.sv_int);
			}
			break;
		case DFF1_NETTOMEDIATYPE:
			{
			char *nettomediatype = NULL;
			nettomediatype =	snval.sv_val.sv_int == 1 ? "other" : 
								snval.sv_val.sv_int == 2 ? "invalid" : 
								snval.sv_val.sv_int == 3 ? "dynamic" : 
								snval.sv_val.sv_int == 4 ? "static" : "unknown";

			//sprintf(szReturn, "%s=%s###%ld$", oidp->name, nettomediatype, snval.sv_val.sv_int);
			sprintf(szReturn, "value=%ld$", snval.sv_val.sv_int);
			}
			break;
		case DFF1_TCPRTOALGORITH:
			{
			char *rtoalgorithm = NULL;
			rtoalgorithm =	snval.sv_val.sv_int == 1 ? "other" :
							snval.sv_val.sv_int == 2 ? "constant" : 
							snval.sv_val.sv_int == 3 ? "rsre" : 
							snval.sv_val.sv_int == 4 ? "vanj" : "unknown";

			//sprintf(szReturn, "%s=%s###%ld$", oidp->name, rtoalgorithm, snval.sv_val.sv_int);
			sprintf(szReturn, "value=%ld$", snval.sv_val.sv_int);
			}
			break;
		case DFF1_TCPCONNSTATE:
			{
			char *connstate = NULL;
			connstate =	snval.sv_val.sv_int == 1 ? "closed" : 
						snval.sv_val.sv_int == 2 ? "listen" : 
						snval.sv_val.sv_int == 3 ? "synSent" : 
						snval.sv_val.sv_int == 4 ? "synReceived" : 
						snval.sv_val.sv_int == 5 ? "established" : 
						snval.sv_val.sv_int == 6 ? "finWait1" : 
						snval.sv_val.sv_int == 7 ? "finWait2" : 
						snval.sv_val.sv_int == 8 ? "closeWait" : 
						snval.sv_val.sv_int == 9 ? "lastAck" : 
						snval.sv_val.sv_int == 10 ? "closing" : 
						snval.sv_val.sv_int == 11 ? "timeWait" : 
						snval.sv_val.sv_int == 12 ? "deleteTCB" : "unknown";

			//sprintf(szReturn, "%s=%s###%ld$", oidp->name, connstate, snval.sv_val.sv_int);
			sprintf(szReturn, "value=%ld$", snval.sv_val.sv_int);
			}
			break;
		case DFF1_EGPNEIGHSTATE:
			{
			char *neighstate = NULL;
			neighstate =	snval.sv_val.sv_int == 1 ? "idle" : 
							snval.sv_val.sv_int == 2 ? "acquisition" : 
							snval.sv_val.sv_int == 3 ? "down" : 
							snval.sv_val.sv_int == 4 ? "up" : 
							snval.sv_val.sv_int == 5 ? "cease" : "unknown";

			//sprintf(szReturn, "%s=%s###%ld$", oidp->name, neighstate, snval.sv_val.sv_int);
			sprintf(szReturn, "value=%ld$", snval.sv_val.sv_int);
			}
			break;
		case DFF1_EGPNEIGHMODE:
			{
			char *neighmode = NULL;
			neighmode = snval.sv_val.sv_int == 1 ? "avtive" : 
						snval.sv_val.sv_int == 2 ? "passive" : "unknown";

			//sprintf(szReturn, "%s=%s###%ld$", oidp->name, neighmode, snval.sv_val.sv_int);
			sprintf(szReturn, "value=%ld$", snval.sv_val.sv_int);
			}
			break;
		case DFF1_EGPNEIGHEVENTT:
			{
			char *neigheventtrigger = NULL;
			neigheventtrigger =	snval.sv_val.sv_int == 1 ? "start" : 
								snval.sv_val.sv_int == 2 ? "stop" : "unknown";

			//sprintf(szReturn, "%s=%s###%ld$", oidp->name, neigheventtrigger, snval.sv_val.sv_int);
			sprintf(szReturn, "value=%ld$", snval.sv_val.sv_int);
			}
			break;
		case DFF1_SNMPENABLETRAP:
			{
			char *enableauthentraps = NULL;
			enableauthentraps =	snval.sv_val.sv_int == 1 ? "enabled" : 
								snval.sv_val.sv_int == 2 ? "disabled" : "unknown";

			//sprintf(szReturn, "%s=%s###%ld$", oidp->name, enableauthentraps, snval.sv_val.sv_int);
			sprintf(szReturn, "value=%ld$", snval.sv_val.sv_int);
			}
			break;
		default:
			//sprintf(szReturn, "%s=%ld$", oidp->name, snval.sv_val.sv_int);
			sprintf(szReturn, "value=%ld$", snval.sv_val.sv_int);
			break;
		}
		if(oidp) free(oidp);
		return TRUE;
	case ASN1_COUNTER:
	case ASN1_GAUGE:
		//sprintf(szReturn, "%s=%ld$", oidp->name, snval.sv_val.sv_int);
		sprintf(szReturn, "value=%u$", snval.sv_val.sv_int);
		if(oidp) free(oidp);
		return TRUE;
	case ASN1_TIMETICKS:
		{
		int days = 0, hours = 0, minutes = 0, secs = 0, psecs = 0;
		days = snval.sv_val.sv_int / (24 * 3600 * 100);
		hours = (snval.sv_val.sv_int % (24 * 3600 * 100)) / (3600 * 100);
		minutes = ((snval.sv_val.sv_int % (24 * 3600 * 100)) % (3600 * 100)) / (60 * 100);
		secs = (((snval.sv_val.sv_int % (24 * 3600 * 100)) % (3600 * 100)) % (60 * 100)) / 100;
		psecs = (((snval.sv_val.sv_int % (24 * 3600 * 100)) % (3600 * 100)) % (60 * 100)) % 100;

		//if(days)
		//	sprintf(szReturn, "%s=%d days, %d:%d:%d.%d###%ld$", oidp->name, days, hours, minutes, secs, psecs, snval.sv_val.sv_int);
		//else
		//	sprintf(szReturn, "%s=%d:%d:%d.%d###%ld$", oidp->name, hours, minutes, secs, psecs, snval.sv_val.sv_int);
		sprintf(szReturn, "value=%u$", snval.sv_val.sv_int);
		if(oidp) free(oidp);
		return TRUE;
		}
	case ASN1_OCTSTR:
		//if(!compare_oid(*oidp, interfaces_ifPhysAddress) || !compare_oid(*oidp, at_atPhysAddress))
		if(oidp->type == DFF1_PHYSADDR && snval.sv_val.sv_str.sv_len == 6)
			//sprintf(szReturn, "%s=%x-%x-%x-%x-%x-%x$", oidp->name, 
			//											*snval.sv_val.sv_str.sv_str & 0xFF, 
			//											*(snval.sv_val.sv_str.sv_str + 1) & 0xFF, 
			//											*(snval.sv_val.sv_str.sv_str + 2) & 0xFF, 
			//											*(snval.sv_val.sv_str.sv_str + 3) & 0xFF, 
			//											*(snval.sv_val.sv_str.sv_str + 4) & 0xFF, 
			//											*(snval.sv_val.sv_str.sv_str + 5) & 0xFF);
			sprintf(szReturn, "value=%x-%x-%x-%x-%x-%x$", 
														*snval.sv_val.sv_str.sv_str & 0xFF, 
														*(snval.sv_val.sv_str.sv_str + 1) & 0xFF, 
														*(snval.sv_val.sv_str.sv_str + 2) & 0xFF, 
														*(snval.sv_val.sv_str.sv_str + 3) & 0xFF, 
														*(snval.sv_val.sv_str.sv_str + 4) & 0xFF, 
														*(snval.sv_val.sv_str.sv_str + 5) & 0xFF);

		else
		{
			//sprintf(szReturn, "%s=", oidp->name);
			//strncat(szReturn, snval.sv_val.sv_str.sv_str, snval.sv_val.sv_str.sv_len);
			//strncat(szReturn, "$", 1);
			sprintf(szReturn, "value=", oidp->name);
			strncat(szReturn, snval.sv_val.sv_str.sv_str, snval.sv_val.sv_str.sv_len);
			strncat(szReturn, "$", 1);

		}
		if(oidp) free(oidp);
		return TRUE;
	case ASN1_NULL:
		//sprintf(szReturn, "%s=%s$", oidp->name, "");
		sprintf(szReturn, "value=%s$", "");
		if(oidp) free(oidp);
		return TRUE;
	case ASN1_OBJID:
		//sprintf(szReturn, "%s=", oidp->name);
		sprintf(szReturn, "%s=", "value");
		if(snval.sv_val.sv_oid.len <= 3)
			sprintf(szReturn, "%s$", szReturn);
		else
			while(i < snval.sv_val.sv_oid.len)
			{
				if(i == 0)
					sprintf(szReturn, "%s1.3.", szReturn);
				else if(i == snval.sv_val.sv_oid.len - 1)
					sprintf(szReturn, "%s%d$", szReturn, snval.sv_val.sv_oid.id[i]);
				else
					sprintf(szReturn, "%s%d.", szReturn, snval.sv_val.sv_oid.id[i]);
		
				i ++;
			}
		if(oidp) free(oidp);
		return TRUE;
	case ASN1_IPADDR:
		//sprintf(szReturn, "%s=%d.%d.%d.%d$",	oidp->name, 
		//										(u_char)*snval.sv_val.sv_ipaddr, 
		//										(u_char)*(snval.sv_val.sv_ipaddr + 1), 
		//										(u_char)*(snval.sv_val.sv_ipaddr + 2), 
		//										(u_char)*(snval.sv_val.sv_ipaddr + 3));
		sprintf(szReturn, "value=%d.%d.%d.%d$",	
												(u_char)*snval.sv_val.sv_ipaddr, 
												(u_char)*(snval.sv_val.sv_ipaddr + 1), 
												(u_char)*(snval.sv_val.sv_ipaddr + 2), 
												(u_char)*(snval.sv_val.sv_ipaddr + 3));
		if(oidp) free(oidp);
		return TRUE;
	default:
		sprintf(szReturn, "error=%s", FuncGetStringFromIDS("<%IDS_SNMP_14%>"));    //  <%IDS_SNMP_14%>
		if(oidp) free(oidp);
		return FALSE;
	}

	return TRUE;
}