Beispiel #1
0
int
DbUtil::getErrorNumber()
{
  return mysql_errno(this->getMysql());
}
Beispiel #2
0
void AddDIDs(char const *cCluster)
{
        MYSQL_RES *res;
        MYSQL_ROW field;
	unsigned uCount=0;
	unsigned uDIDCount=0;
	unsigned rc;

	if(!guSilent) printf("AddDIDs() start\n");

	sprintf(gcQuery,"SELECT tDID.uDID,tDID.cDID,tAddress.cIP,tAddress.uPort,tAddress.uPriority,tAddress.uWeight"
			" FROM tAddress,tPBX,tDID,tCluster"
			" WHERE tDID.uPBX=tPBX.uPBX"
			" AND tPBX.uPBX=tAddress.uPBX"
			" AND tDID.uCluster=tCluster.uCluster"
			" AND tCluster.cLabel='%s'"
			" ORDER BY tAddress.uPriority,tAddress.uWeight"
				,cCluster);
	mysql_query(&gMysql,gcQuery);
	if(mysql_errno(&gMysql))
	{
		printf(gcQuery);
		logfileLine("AddDIDs",mysql_error(&gMysql));
		mysql_close(&gMysql);
		exit(2);
	}
        res=mysql_store_result(&gMysql);
	unsigned uFirstTime=0;
	char cKey[100];
	char cData[1028]={""};
	char cCurrentDID[16]={"x"};
	while((field=mysql_fetch_row(res)))
	{
		char cValue[128]={""};

		if(uCount>8) break;
		sprintf(cValue,"cDestinationIP=%.15s;uDestinationPort=%.5s;uPriority=%.5s,uWeight=%.5s;\n",
						field[2],field[3],field[4],field[5]);
		if((strlen(cData)+strlen(cValue))<sizeof(cData))
				strcat(cData,cValue);

		if(strcmp(field[0],cCurrentDID))
		{
			//New DID
			sprintf(cCurrentDID,"%s",field[0]);
			sprintf(cKey,"%.90s-did",field[1]);
			if(!guSilent)
				printf("Trying: %s %s\n",cKey,cValue);
			if(!uFirstTime && cData[0])
			{
				rc=memcached_set(gsMemc,cKey,strlen(cKey),cData,strlen(cData),(time_t)0,(uint32_t)0);
				if(rc!=MEMCACHED_SUCCESS)
				{
					if(guLogLevel>0)
					{
						logfileLine("AddDIDs",cKey);
						logfileLine("AddDIDs",cValue);
					}
				}
				cData[0]=0;
				uCount=0;
				uDIDCount++;
				if(!guSilent)
					printf("Added: %s %s\n",cKey,cValue);
			}
			uFirstTime=0;
		}

	}
	mysql_free_result(res);


	if(cData[0])
	{
		rc=memcached_set(gsMemc,cKey,strlen(cKey),cData,strlen(cData),(time_t)0,(uint32_t)0);
		if(rc!=MEMCACHED_SUCCESS)
		{
			if(guLogLevel>0)
			{
				logfileLine("AddDIDs",cKey);
				logfileLine("AddDIDs",cData);
			}
		}
		else
		{
			uDIDCount++;
		}
		if(!guSilent)
			printf("%s %s\n",cKey,cData);
	}

	if(guLogLevel>0)
	{
		sprintf(gcQuery,"Added %u keys",uDIDCount);
		logfileLine("AddDIDs",gcQuery);
		if(!guSilent) printf(gcQuery);
	}
	if(!guSilent) printf("AddDIDs() end\n");

}//void AddDIDs()
Beispiel #3
0
void AddRules(char const *cCluster)
{
        MYSQL_RES *res;
        MYSQL_ROW field;
        MYSQL_RES *res2;
        MYSQL_ROW field2;

	unsigned uCluster=uGetCluster(cCluster);
	if(!uCluster)
	{
		logfileLine("AddRules cluster not found",cCluster);
		return;
	}

	if(!guSilent) printf("AddRules() start\n");
	sprintf(gcQuery,"SELECT DISTINCT tRule.uRule,"
				"tRule.cLabel,"
				"if(tRule.cPrefix='','Any',tRule.cPrefix),"
				"tRule.uPriority,"
				"if(tRule.cPrefix='','0','1') AS HasPrefix,"
				"tRule.cComment"
			" FROM tRule,tGroupGlue,tTimeInterval"
			" WHERE tTimeInterval.uTimeInterval=tGroupGlue.uKey"
			" AND tGroupGlue.uGroup=tRule.uRule"
			" AND tGroupGlue.uGroupType=1"
			" AND tRule.uCluster=%u"
			" AND IF(tTimeInterval.cStartDate='',1,DATE(NOW())>=tTimeInterval.cStartDate)"
			" AND IF(tTimeInterval.cEndDate='',1,DATE(NOW())<=tTimeInterval.cEndDate)"
			" AND IF(tTimeInterval.cStartTime='',1,TIME(NOW())>=tTimeInterval.cStartTime)"
			" AND IF(tTimeInterval.cEndTime='',1,TIME(NOW())<=tTimeInterval.cEndTime)"
			" AND INSTR(tTimeInterval.cDaysOfWeek,DAYOFWEEK(NOW()))>0"
			" ORDER BY HasPrefix DESC,tRule.uPriority",uCluster);
	mysql_query(&gMysql,gcQuery);
	if(mysql_errno(&gMysql))
	{
		printf(gcQuery);
		logfileLine("AddRules",mysql_error(&gMysql));
		mysql_close(&gMysql);
		exit(2);
	}
        res2=mysql_store_result(&gMysql);
	while((field2=mysql_fetch_row(res2)))
	{
		unsigned uCount=0;
		char cData[RULE_BUFFER_SIZE]={""};
		sprintf(cData,"uRule=%.16s;cLabel=%.32s;cPrefix=%.32s;uPriority=%.5s;%.31s\n",
				field2[0],field2[1],field2[2],field2[3],field2[5]);
		sprintf(gcQuery,"SELECT DISTINCT tAddress.cIP,tAddress.uPort,tAddress.uPriority,tAddress.uWeight"
			" FROM tRule,tGroupGlue,tGateway,tAddress,tCluster"
			" WHERE tGateway.uCluster=tCluster.uCluster"
			" AND tGateway.uGateway=tGroupGlue.uKey"
			" AND tGroupGlue.uGroup=tRule.uRule"
			" AND tRule.uRule=%s"
			" AND tAddress.uGateway=tGateway.uGateway"
			" AND tGroupGlue.uGroupType=2"
			" AND tGateway.uGatewayType=2"//PSTN Outbound
			" AND tCluster.cLabel='%s'"
			" ORDER BY tAddress.uPriority,tAddress.uWeight"
				,field2[0],cCluster);
		mysql_query(&gMysql,gcQuery);
		if(mysql_errno(&gMysql))
		{
			printf(gcQuery);
			logfileLine("AddRules",mysql_error(&gMysql));
			mysql_close(&gMysql);
			exit(2);
		}
		res=mysql_store_result(&gMysql);
		while((field=mysql_fetch_row(res)))
		{
			if(uCount>MAX_ADDR) break;
			char cValue[128]={""};
			sprintf(cValue,"cDestinationIP=%.15s;uDestinationPort=%.5s;uPriority=%.5s,uWeight=%.5s;\n",
						field[0],field[1],field[2],field[3]);
			if((strlen(cData)+strlen(cValue))<sizeof(cData))
				strcat(cData,cValue);
			uCount++;
		}//while ips
		mysql_free_result(res);

		//We created the data string now commit to memcached
		char cKey[100];
		unsigned rc;
		sprintf(cKey,"%s-rule",field2[0]);
		rc=memcached_set(gsMemc,cKey,strlen(cKey),cData,strlen(cData),(time_t)0,(uint32_t)0);
		if(rc!=MEMCACHED_SUCCESS)
		{
			if(guLogLevel>0)
			{
				logfileLine("AddRules error",cKey);
				logfileLine("AddRules error",cData);
			}
		}
		if(!guSilent)
			printf("%s %s\n",cKey,cData);

		if(guLogLevel>2)
		{
			sprintf(gcQuery,"Added 1 key with %u outbound servers",uCount);
			logfileLine("AddRules",gcQuery);
		}
	}//while rules
	if(!guSilent) printf("AddRules() end\n");

}//void AddRules()
// Implementation
static boolean load_phr_authority_list(SSL *ssl_client)
{
	MYSQL     *db_conn = NULL;
	MYSQL_RES *result  = NULL;
  	MYSQL_ROW row;
	char      stat[SQL_STATEMENT_LENGTH + 1];
	char	  err_msg[ERR_MSG_LENGTH + 1];

	char      buffer[BUFFER_LENGTH + 1];

	// Connect the database
	connect_db(&db_conn, DB_IP, DB_USERNAME, DB_PASSWD, DB_NAME);

	// Query for PHR authority list
	sprintf(stat, "SELECT phr_authority_name, emergency_server_ip_addr FROM %s", ESA__PHR_AUTHORITIES);

	if(mysql_query(db_conn, stat))
  	{
      		sprintf(err_msg, "Error %u: %s\n", mysql_errno(db_conn), mysql_error(db_conn));
      		int_error(err_msg);
  	}

  	result = mysql_store_result(db_conn);
	while((row = mysql_fetch_row(result)))
	{
		// Send the PHR authority information
		write_token_into_buffer("is_end_of_phr_authority_list_flag", "0", true, buffer);
		write_token_into_buffer("phr_authority_name", row[0], false, buffer);
		write_token_into_buffer("ip_address", row[1], false, buffer);

		if(!SSL_send_buffer(ssl_client, buffer, strlen(buffer)))
		{
			fprintf(stderr, "Sending the PHR authority information failed\n");
			goto ERROR;
		}
	}

	if(result)
	{
		mysql_free_result(result);
		result = NULL;
	}

	disconnect_db(&db_conn);

	// Send the end of authority list
	write_token_into_buffer("is_end_of_phr_authority_list_flag", "1", true, buffer);

	if(!SSL_send_buffer(ssl_client, buffer, strlen(buffer)))
	{
		fprintf(stderr, "Sending the end of PHR authority list failed\n");
		goto ERROR;
	}

	return true;

ERROR:

	if(result)
	{
		mysql_free_result(result);
		result = NULL;
	}

	disconnect_db(&db_conn);
	return false;
}
Beispiel #5
0
//Remove -gw and -did keys that are no longer in db
void DelOldKeys(char const *cCluster)
{
	memcached_return rc;

	if(!guSilent) printf("DelOldKeys() start\n");
	unsigned uCluster=uGetCluster(cCluster);
	if(!uCluster)
	{
		logfileLine("DelOldKeys cluster not found",cCluster);
		return;
	}

	void vKeyPrinter(const memcached_st *gsMemc, const char *cKey)
	{
        	MYSQL_RES *res;
		char *cp;
		unsigned uRc;
		memcached_st *gsLocalMemc;
		memcached_server_st *servers = NULL;
		gsLocalMemc=memcached_create(NULL);
		servers=memcached_server_list_append(servers,"localhost",11211,&rc);
		rc=memcached_server_push(gsLocalMemc,servers);
		if(rc!=MEMCACHED_SUCCESS)
		{
			sprintf(gcQuery,"couldn't add server: %s",memcached_strerror(gsLocalMemc,rc));
			logfileLine("vKeyPrinter",gcQuery);
			if(!guSilent) printf("%s\n",gcQuery);
			return;
		}

		if(strstr(cKey,"-did"))
		{
			if((cp=strchr(cKey,'-')))
				*cp=0;
			if(!guSilent) printf("%s-did\n",cKey);
			sprintf(gcQuery,"SELECT uDID FROM tDID WHERE cDID='%s' AND uCluster=%u",cKey,uCluster);
			mysql_query(&gMysql,gcQuery);
			if(mysql_errno(&gMysql))
			{
				printf(gcQuery);
				logfileLine("DelOldKeys",mysql_error(&gMysql));
				mysql_close(&gMysql);
				exit(2);
			}
        		res=mysql_store_result(&gMysql);
			if(mysql_num_rows(res)<1)
			{
				*cp='-';
				uRc=memcached_delete(gsLocalMemc,cKey,strlen(cKey),(time_t)0);
				if(uRc!=MEMCACHED_SUCCESS)
				{
					if(guLogLevel>2)
					{
						logfileLine("DelOldKeys not found",cKey);
					}
					if(!guSilent) printf("DelOldKeys() %s not found\n",cKey);
				}
				else
				{
					if(guLogLevel>2)
					{
						logfileLine("DelOldKeys",cKey);
					}
					if(!guSilent) printf("DelOldKeys() %s\n",cKey);
				}
			}
		}
		else if(strstr(cKey,"-gw"))
		{
			unsigned uPort=5060;
			char *cp2=NULL;
			if((cp=strchr(cKey,'-')))
				*cp=0;
			if((cp2=strchr(cKey,':')))
			{
				*cp2=0;
				sscanf(cp2+1,"%u",&uPort);
			}
			if(!guSilent)
			{
				if(cp2)
					printf("%s:%u-gw\n",cKey,uPort);
				else
					printf("%s-gw\n",cKey);
			}
			sprintf(gcQuery,"SELECT tAddress.uAddress FROM tAddress,tGateway,tPBX"
					" WHERE tAddress.cIP='%s' AND tAddress.uPort=%u"
					" AND ("
					" ( tAddress.uGateway=tGateway.uGateway"
					" AND tGateway.uCluster=%u"
					" ) OR ("
					" ( tAddress.uPBX=tPBX.uPBX"
					" AND tPBX.uCluster=%u) )"
					" )",cKey,uPort,uCluster,uCluster);
			mysql_query(&gMysql,gcQuery);
			if(mysql_errno(&gMysql))
			{
				printf(gcQuery);
				logfileLine("DelOldKeys",mysql_error(&gMysql));
				mysql_close(&gMysql);
				exit(2);
			}
        		res=mysql_store_result(&gMysql);
			if(mysql_num_rows(res)<1)
			{
				*cp='-';
				if(cp2)
					*cp2=':';
				uRc=memcached_delete(gsLocalMemc,cKey,strlen(cKey),(time_t)0);
				if(uRc!=MEMCACHED_SUCCESS)
				{
					if(guLogLevel>2)
					{
						logfileLine("DelOldKeys not found",cKey);
					}
					if(!guSilent) printf("DelOldKeys() %s not found\n",cKey);
				}
				else
				{
					if(guLogLevel>2)
					{
						logfileLine("DelOldKeys",cKey);
					}
					if(!guSilent) printf("DelOldKeys() %s\n",cKey);
				}
			}
		}
	}
DatabaseException::DatabaseException(MYSQL *db, const std::string &initialMessage) {
	_errno = mysql_errno(db);
	_errorMessage = mysql_error(db);
	_initialMessage = initialMessage;
	_sqlState = mysql_sqlstate(db);
}
Beispiel #7
0
void tProject(const char *cResult)
{
	MYSQL_RES *res;
	MYSQL_RES *res2;
	MYSQL_ROW field;

	//Internal skip reloading
	if(!cResult[0])
	{
		if(guMode)
			ExttProjectSelectRow();
		else
			ExttProjectSelect();

		mysql_query(&gMysql,gcQuery);
		if(mysql_errno(&gMysql))
        	{
			if(strstr(mysql_error(&gMysql)," doesn't exist"))
                	{
				CreatetProject();
				unxsRAD("New tProject table created");
                	}
			else
			{
				htmlPlainTextError(mysql_error(&gMysql));
			}
        	}

		res=mysql_store_result(&gMysql);
		if((guI=mysql_num_rows(res)))
		{
			if(guMode==6)
			{
			sprintf(gcQuery,"SELECT _rowid FROM tProject WHERE uProject=%u"
						,uProject);
				macro_mySQLRunAndStore(res2);
				field=mysql_fetch_row(res2);
				sscanf(field[0],"%lu",&gluRowid);
				gluRowid++;
			}
			PageMachine("",0,"");
			if(!guMode) mysql_data_seek(res,gluRowid-1);
			field=mysql_fetch_row(res);
		sscanf(field[0],"%u",&uProject);
		sprintf(cLabel,"%.32s",field[1]);
		sscanf(field[2],"%u",&uProjectStatus);
		sscanf(field[3],"%u",&uTemplateSet);
		cDescription=field[4];
		sprintf(cDirectory,"%.100s",field[5]);
		sscanf(field[6],"%u",&uOwner);
		sscanf(field[7],"%u",&uCreatedBy);
		sscanf(field[8],"%lu",&uCreatedDate);
		sscanf(field[9],"%u",&uModBy);
		sscanf(field[10],"%lu",&uModDate);

		}

	}//Internal Skip

	Header_ism3(":: tProject",0);
	printf("<table width=100%% cellspacing=0 cellpadding=0>\n");
	printf("<tr><td colspan=2 align=right valign=center>");


	printf("<input type=hidden name=gcFunction value=tProjectTools>");
	printf("<input type=hidden name=gluRowid value=%lu>",gluRowid);
	if(guI)
	{
		if(guMode==6)
			//printf(" Found");
			printf(LANG_NBR_FOUND);
		else if(guMode==7)
			printf("Workflow loaded");
		else if(guMode==5)
			//printf(" Modified");
			printf(LANG_NBR_MODIFIED);
		else if(guMode==4)
			//printf(" New");
			printf(LANG_NBR_NEW);
		if(guMode!=7)
			printf(LANG_NBRF_SHOWING,gluRowid,guI);
	}
	else
	{
		if(!cResult[0])
		//printf(" No records found");
		printf(LANG_NBR_NORECS);
	}
	if(cResult[0]) printf("%s",cResult);
	printf("</td></tr>");
	printf("<tr><td valign=top width=25%%>");

        ExttProjectButtons();

        printf("</td><td valign=top>");
	//
	OpenFieldSet("tProject Record Data",100);

	if(guMode==2000 || guMode==2002)
		tProjectInput(1);
	else
		tProjectInput(0);

	//
	CloseFieldSet();

	//Bottom table
	printf("<tr><td colspan=2>");
        ExttProjectAuxTable();

	Footer_ism3();

}//end of tProject();
/**
 * Monitor an individual server
 *
 * @param database	The database to probe
 */
static void
monitorDatabase(MONITOR_SERVERS	*database, char *defaultUser, char *defaultPasswd)
{
MYSQL_ROW	row;
MYSQL_RES	*result;
int		num_fields;
int		isjoined = 0;
char            *uname = defaultUser, *passwd = defaultPasswd;
unsigned long int	server_version = 0;
char 			*server_string;

	if (database->server->monuser != NULL)
	{
		uname = database->server->monuser;
		passwd = database->server->monpw;
	}
	if (uname == NULL)
		return;

	/* Don't even probe server flagged as in maintenance */
	if (SERVER_IN_MAINT(database->server))
		return;

	if (database->con == NULL || mysql_ping(database->con) != 0)
	{
		char *dpwd = decryptPassword(passwd);
		int rc;
		int read_timeout = 1;

		database->con = mysql_init(NULL);
		rc = mysql_options(database->con, MYSQL_OPT_READ_TIMEOUT, (void *)&read_timeout);

		if (mysql_real_connect(database->con, database->server->name,
			uname, dpwd, NULL, database->server->port, NULL, 0) == NULL)
		{
			LOGIF(LE, (skygw_log_write_flush(
				LOGFILE_ERROR,
				"Error : Monitor was unable to connect to "
				"server %s:%d : \"%s\"",
				database->server->name,
				database->server->port,
				mysql_error(database->con))));
			server_clear_status(database->server, SERVER_RUNNING);
			if (mysql_errno(database->con) == ER_ACCESS_DENIED_ERROR)
			{
				server_set_status(database->server, SERVER_AUTH_ERROR);
			}
			database->server->node_id = -1;
			free(dpwd);
			return;
		}
		else
		{
			server_clear_status(database->server, SERVER_AUTH_ERROR);
		}
		free(dpwd);
	}

	/* If we get this far then we have a working connection */
	server_set_status(database->server, SERVER_RUNNING);

	/* get server version from current server */
	server_version = mysql_get_server_version(database->con);

	/* get server version string */
	server_string = (char *)mysql_get_server_info(database->con);
	if (server_string) {
		database->server->server_string = realloc(database->server->server_string, strlen(server_string)+1);
		if (database->server->server_string)
			strcpy(database->server->server_string, server_string);
	}	

	/* Check if the the SQL node is able to contact one or more data nodes */
	if (mysql_query(database->con, "SHOW STATUS LIKE 'Ndb_number_of_ready_data_nodes'") == 0
		&& (result = mysql_store_result(database->con)) != NULL)
	{
		num_fields = mysql_num_fields(result);
		while ((row = mysql_fetch_row(result)))
		{
			if (atoi(row[1]) > 0)
				isjoined = 1;
		}
		mysql_free_result(result);
	}

	/* Check the the SQL node id in the MySQL cluster */
	if (mysql_query(database->con, "SHOW STATUS LIKE 'Ndb_cluster_node_id'") == 0
		&& (result = mysql_store_result(database->con)) != NULL)
	{
		long cluster_node_id = -1;
		num_fields = mysql_num_fields(result);
		while ((row = mysql_fetch_row(result)))
		{
			cluster_node_id = strtol(row[1], NULL, 10);
			if ((errno == ERANGE && (cluster_node_id == LONG_MAX
				|| cluster_node_id == LONG_MIN)) || (errno != 0 && cluster_node_id == 0))
			{
				cluster_node_id = -1;
			}
			database->server->node_id = cluster_node_id;
		}
		mysql_free_result(result);
	}

	if (isjoined) {
		server_set_status(database->server, SERVER_NDB);
		database->server->depth = 0;
	} else {
		server_clear_status(database->server, SERVER_NDB);
		database->server->depth = -1;
	}
}
Beispiel #9
0
void tNASGroup(const char *cResult)
{
	MYSQL_RES *res;
	MYSQL_RES *res2;
	MYSQL_ROW field;

	//Internal skip reloading
	if(!cResult[0])
	{
		if(guMode)
			ExttNASGroupSelectRow();
		else
			ExttNASGroupSelect();

		mysql_query(&gMysql,gcQuery);
		if(mysql_errno(&gMysql))
        	{
			if(strstr(mysql_error(&gMysql)," doesn't exist"))
                	{
				CreatetNASGroup();
				unxsRadius("New tNASGroup table created");
                	}
			else
			{
				htmlPlainTextError(mysql_error(&gMysql));
			}
        	}

		res=mysql_store_result(&gMysql);
		if((guI=mysql_num_rows(res)))
		{
			if(guMode==6)
			{
			sprintf(gcQuery,"SELECT _rowid FROM tNASGroup WHERE uNAS=%u"
						,uNAS);
				mysql_query(&gMysql,gcQuery);
				res2=mysql_store_result(&gMysql);
				field=mysql_fetch_row(res2);
				sscanf(field[0],"%lu",&gluRowid);
				gluRowid++;
			}
			PageMachine("",0,"");
			if(!guMode) mysql_data_seek(res,gluRowid-1);
			field=mysql_fetch_row(res);
		sscanf(field[0],"%u",&uNAS);
		sscanf(field[1],"%u",&uServer);

		}

	}//Internal Skip

	Header_ism3(":: tNASGroup",1);
	printf("<table width=100%% cellspacing=0 cellpadding=0>\n");
	printf("<tr><td colspan=2 align=right valign=center>");


	printf("<input type=hidden name=gcFunction value=tNASGroupTools>");
	printf("<input type=hidden name=gluRowid value=%lu>",gluRowid);
	if(guI)
	{
		if(guMode==6)
			//printf(" Found");
			printf(LANG_NBR_FOUND);
		else if(guMode==5)
			//printf(" Modified");
			printf(LANG_NBR_MODIFIED);
		else if(guMode==4)
			//printf(" New");
			printf(LANG_NBR_NEW);
		printf(LANG_NBRF_SHOWING,gluRowid,guI);
	}
	else
	{
		if(!cResult[0])
		//printf(" No records found");
		printf(LANG_NBR_NORECS);
	}
	if(cResult[0]) printf("%s",cResult);
	printf("</td></tr>");
	printf("<tr><td valign=top width=25%%>");

        ExttNASGroupButtons();

        printf("</td><td valign=top>");
	//
	OpenFieldSet("tNASGroup Record Data",100);

	if(guMode==2000 || guMode==2002)
		tNASGroupInput(1);
	else
		tNASGroupInput(0);

	//
	CloseFieldSet();

	//Bottom table
	printf("<tr><td colspan=2>");
        ExttNASGroupAuxTable();

	Footer_ism3();

}//end of tNASGroup();
Beispiel #10
0
int main( int argc, char *argv[] )
{
	self = argv[0];

	srand( getpid() * time( 0 ) );

	static struct option long_options[] = {
		{"device", 2, 0, 'd'},
		{"monitor", 1, 0, 'm'},
		{"verbose", 0, 0, 'v'},
		{"image", 2, 0, 'i'},
		{"scale", 1, 0, 'S'},
		{"timestamp", 2, 0, 't'},
		{"state", 0, 0, 's'},
		{"brightness", 2, 0, 'B'},
		{"contrast", 2, 0, 'C'},
		{"hue", 2, 0, 'H'},
		{"contrast", 2, 0, 'O'},
		{"read_index", 0, 0, 'R'},
		{"write_index", 0, 0, 'W'},
		{"event", 0, 0, 'e'},
		{"fps", 0, 0, 'f'},
		{"zones", 2, 0, 'z'},
		{"alarm", 0, 0, 'a'},
		{"noalarm", 0, 0, 'n'},
		{"cancel", 0, 0, 'c'},
		{"reload", 0, 0, 'L'},
		{"enable", 0, 0, 'E'},
		{"disable", 0, 0, 'D'},
		{"suspend", 0, 0, 'u'},
		{"resume", 0, 0, 'r'},
		{"query", 0, 0, 'q'},
		{"username", 1, 0, 'U'},
		{"password", 1, 0, 'P'},
		{"auth", 1, 0, 'A'},
		{"version", 1, 0, 'V'},
		{"help", 0, 0, 'h'},
		{"list", 0, 0, 'l'},
		{0, 0, 0, 0}
	};

	const char *device = 0;
	int mon_id = 0;
	bool verbose = false;
	int function = ZMU_BOGUS;

	int image_idx = -1;
	int scale = -1;
	int brightness = -1;
	int contrast = -1;
	int hue = -1;
	int colour = -1;
	char *zoneString = 0;
	char *username = 0;
	char *password = 0;
	char *auth = 0;
#if ZM_HAS_V4L
#if ZM_HAS_V4L2
    int v4lVersion = 2;
#elif ZM_HAS_V4L1
    int v4lVersion = 1;
#endif // ZM_HAS_V4L2/1
#endif // ZM_HAS_V4L
	while (1)
	{
		int option_index = 0;

		int c = getopt_long (argc, argv, "d:m:vsEDLurwei::S:t::fz::ancqhlB::C::H::O::U:P:A:V:", long_options, &option_index);
		if (c == -1)
		{
			break;
		}

		switch (c)
		{
			case 'd':
                if ( optarg )
				    device = optarg;
				break;
			case 'm':
				mon_id = atoi(optarg);
				break;
			case 'v':
				verbose = true;
				break;
			case 's':
				function |= ZMU_STATE;
				break;
			case 'i':
				function |= ZMU_IMAGE;
				if ( optarg )
					image_idx = atoi( optarg );
				break;
			case 'S':
				scale = atoi(optarg);
				break;
			case 't':
				function |= ZMU_TIME;
				if ( optarg )
					image_idx = atoi( optarg );
				break;
			case 'R':
				function |= ZMU_READ_IDX;
				break;
			case 'W':
				function |= ZMU_WRITE_IDX;
				break;
			case 'e':
				function |= ZMU_EVENT;
				break;
			case 'f':
				function |= ZMU_FPS;
				break;
			case 'z':
				function |= ZMU_ZONES;
				if ( optarg )
					zoneString = optarg;
				break;
			case 'a':
				function |= ZMU_ALARM;
				break;
			case 'n':
				function |= ZMU_NOALARM;
				break;
			case 'c':
				function |= ZMU_CANCEL;
				break;
			case 'L':
				function |= ZMU_RELOAD;
				break;
			case 'E':
				function |= ZMU_ENABLE;
				break;
			case 'D':
				function |= ZMU_DISABLE;
				break;
			case 'u':
				function |= ZMU_SUSPEND;
				break;
			case 'r':
				function |= ZMU_RESUME;
				break;
			case 'q':
				function |= ZMU_QUERY;
				break;
			case 'B':
				function |= ZMU_BRIGHTNESS;
				if ( optarg )
					brightness = atoi( optarg );
				break;
			case 'C':
				function |= ZMU_CONTRAST;
				if ( optarg )
					contrast = atoi( optarg );
				break;
			case 'H':
				function |= ZMU_HUE;
				if ( optarg )
					hue = atoi( optarg );
				break;
			case 'O':
				function |= ZMU_COLOUR;
				if ( optarg )
					colour = atoi( optarg );
				break;
			case 'U':
				username = optarg;
				break;
			case 'P':
				password = optarg;
				break;
			case 'A':
				auth = optarg;
				break;
#if ZM_HAS_V4L
			case 'V':
				v4lVersion = (atoi(optarg)==1)?1:2;
				break;
#endif // ZM_HAS_V4L
			case 'h':
				Usage( 0 );
				break;
			case 'l':
				function |= ZMU_LIST;
				break;
			case '?':
				Usage();
				break;
			default:
				//fprintf( stderr, "?? getopt returned character code 0%o ??\n", c );
				break;
		}
	}

	if (optind < argc)
	{
		fprintf( stderr, "Extraneous options, " );
		while (optind < argc)
			fprintf( stderr, "%s ", argv[optind++]);
		fprintf( stderr, "\n");
		Usage();
	}

	if ( device && !(function&ZMU_QUERY) )
	{
		fprintf( stderr, "Error, -d option cannot be used with this option\n" );
		Usage();
	}
	if ( scale != -1 && !(function&ZMU_IMAGE) )
	{
		fprintf( stderr, "Error, -S option cannot be used with this option\n" );
		Usage();
	}
	//printf( "Monitor %d, Function %d\n", mon_id, function );

	zmLoadConfig();

	logInit( "zmu" );

	zmSetDefaultTermHandler();
	zmSetDefaultDieHandler();

	User *user = 0;

	if ( config.opt_use_auth )
	{
		if ( strcmp( config.auth_relay, "none" ) == 0 )
		{
			if ( !username )
			{
				fprintf( stderr, "Error, username must be supplied\n" );
				exit( -1 );
			}

			if ( username )
			{
				user = zmLoadUser( username );
			}
		}
		else
		{
			if ( !(username && password) && !auth )
			{
				fprintf( stderr, "Error, username and password or auth string must be supplied\n" );
				exit( -1 );
			}

			//if ( strcmp( config.auth_relay, "hashed" ) == 0 )
			{
				if ( auth )
				{
					user = zmLoadAuthUser( auth, false );
				}
			}
			//else if ( strcmp( config.auth_relay, "plain" ) == 0 )
			{
				if ( username && password )
				{
					user = zmLoadUser( username, password );
				}
			}
		}
		if ( !user )
		{
			fprintf( stderr, "Error, unable to authenticate user\n" );
			exit( -1 );
		}
		ValidateAccess( user, mon_id, function );
	}
	

	if ( mon_id > 0 )
	{
		Monitor *monitor = Monitor::Load( mon_id, function&(ZMU_QUERY|ZMU_ZONES), Monitor::QUERY );
		if ( monitor )
		{
			if ( verbose )
			{
				printf( "Monitor %d(%s)\n", monitor->Id(), monitor->Name() );
			}
			char separator = ' ';
			bool have_output = false;
			if ( function & ZMU_STATE )
			{
				Monitor::State state = monitor->GetState();
				if ( verbose )
					printf( "Current state: %s\n", state==Monitor::ALARM?"Alarm":(state==Monitor::ALERT?"Alert":"Idle") );
				else
				{
					if ( have_output ) printf( "%c", separator );
					printf( "%d", state );
					have_output = true;
				}
			}
			if ( function & ZMU_TIME )
			{
				struct timeval timestamp = monitor->GetTimestamp( image_idx );
				if ( verbose )
				{
					char timestamp_str[64] = "None";
					if ( timestamp.tv_sec )
						strftime( timestamp_str, sizeof(timestamp_str), "%Y-%m-%d %H:%M:%S", localtime( &timestamp.tv_sec ) );
					if ( image_idx == -1 )
						printf( "Time of last image capture: %s.%02ld\n", timestamp_str, timestamp.tv_usec/10000 );
					else
						printf( "Time of image %d capture: %s.%02ld\n", image_idx, timestamp_str, timestamp.tv_usec/10000 );
				}
				else
				{
					if ( have_output ) printf( "%c", separator );
					printf( "%ld.%02ld", timestamp.tv_sec, timestamp.tv_usec/10000 );
					have_output = true;
				}
			}
			if ( function & ZMU_READ_IDX )
			{
				if ( verbose )
					printf( "Last read index: %d\n", monitor->GetLastReadIndex() );
				else
				{
					if ( have_output ) printf( "%c", separator );
					printf( "%d", monitor->GetLastReadIndex() );
					have_output = true;
				}
			}
			if ( function & ZMU_WRITE_IDX )
			{
				if ( verbose )
					printf( "Last write index: %d\n", monitor->GetLastWriteIndex() );
				else
				{
					if ( have_output ) printf( "%c", separator );
					printf( "%d", monitor->GetLastWriteIndex() );
					have_output = true;
				}
			}
			if ( function & ZMU_EVENT )
			{
				if ( verbose )
					printf( "Last event id: %d\n", monitor->GetLastEvent() );
				else
				{
					if ( have_output ) printf( "%c", separator );
					printf( "%d", monitor->GetLastEvent() );
					have_output = true;
				}
			}
			if ( function & ZMU_FPS )
			{
				if ( verbose )
					printf( "Current capture rate: %.2f frames per second\n", monitor->GetFPS() );
				else
				{
					if ( have_output ) printf( "%c", separator );
					printf( "%.2f", monitor->GetFPS() );
					have_output = true;
				}
			}
			if ( function & ZMU_IMAGE )
			{
				if ( verbose )
				{
					if ( image_idx == -1 )
						printf( "Dumping last image captured to Monitor%d.jpg", monitor->Id() );
					else
						printf( "Dumping buffer image %d to Monitor%d.jpg", image_idx, monitor->Id() );
					if ( scale != -1 )
						printf( ", scaling by %d%%", scale );
					printf( "\n" );
				}
				monitor->GetImage( image_idx, scale>0?scale:100 );
			}
			if ( function & ZMU_ZONES )
			{
				if ( verbose )
					printf( "Dumping zone image to Zones%d.jpg\n", monitor->Id() );
				monitor->DumpZoneImage( zoneString );
			}
			if ( function & ZMU_ALARM )
			{
				if ( verbose )
					printf( "Forcing alarm on\n" );
				monitor->ForceAlarmOn( config.forced_alarm_score, "Forced Web" );
			}
			if ( function & ZMU_NOALARM )
			{
				if ( verbose )
					printf( "Forcing alarm off\n" );
				monitor->ForceAlarmOff();
			}
			if ( function & ZMU_CANCEL )
			{
				if ( verbose )
					printf( "Cancelling forced alarm on/off\n" );
				monitor->CancelForced();
			}
			if ( function & ZMU_RELOAD )
			{
				if ( verbose )
					printf( "Reloading monitor settings\n" );
				monitor->actionReload();
			}
			if ( function & ZMU_ENABLE )
			{
				if ( verbose )
					printf( "Enabling event generation\n" );
				monitor->actionEnable();
			}
			if ( function & ZMU_DISABLE )
			{
				if ( verbose )
					printf( "Disabling event generation\n" );
				monitor->actionDisable();
			}
			if ( function & ZMU_SUSPEND )
			{
				if ( verbose )
					printf( "Suspending event generation\n" );
				monitor->actionSuspend();
			}
			if ( function & ZMU_RESUME )
			{
				if ( verbose )
					printf( "Resuming event generation\n" );
				monitor->actionResume();
			}
			if ( function & ZMU_QUERY )
			{
				char monString[16382] = "";
				monitor->DumpSettings( monString, verbose );
				printf( "%s\n", monString );
			}
			if ( function & ZMU_BRIGHTNESS )
			{
				if ( verbose )
				{
					if ( brightness >= 0 )
						printf( "New brightness: %d\n", monitor->actionBrightness( brightness ) );
					else
						printf( "Current brightness: %d\n", monitor->actionBrightness() );
				}
				else
				{
					if ( have_output ) printf( "%c", separator );
					if ( brightness >= 0 )
						printf( "%d", monitor->actionBrightness( brightness ) );
					else
						printf( "%d", monitor->actionBrightness() );
					have_output = true;
				}
			}
			if ( function & ZMU_CONTRAST )
			{
				if ( verbose )
				{
					if ( contrast >= 0 )
						printf( "New brightness: %d\n", monitor->actionContrast( contrast ) );
					else
						printf( "Current contrast: %d\n", monitor->actionContrast() );
				}
				else
				{
					if ( have_output ) printf( "%c", separator );
					if ( contrast >= 0 )
						printf( "%d", monitor->actionContrast( contrast ) );
					else
						printf( "%d", monitor->actionContrast() );
					have_output = true;
				}
			}
			if ( function & ZMU_HUE )
			{
				if ( verbose )
				{
					if ( hue >= 0 )
						printf( "New hue: %d\n", monitor->actionHue( hue ) );
					else
						printf( "Current hue: %d\n", monitor->actionHue() );
				}
				else
				{
					if ( have_output ) printf( "%c", separator );
					if ( hue >= 0 )
						printf( "%d", monitor->actionHue( hue ) );
					else
						printf( "%d", monitor->actionHue() );
					have_output = true;
				}
			}
			if ( function & ZMU_COLOUR )
			{
				if ( verbose )
				{
					if ( colour >= 0 )
						printf( "New colour: %d\n", monitor->actionColour( colour ) );
					else
						printf( "Current colour: %d\n", monitor->actionColour() );
				}
				else
				{
					if ( have_output ) printf( "%c", separator );
					if ( colour >= 0 )
						printf( "%d", monitor->actionColour( colour ) );
					else
						printf( "%d", monitor->actionColour() );
					have_output = true;
				}
			}
			if ( have_output )
			{
				printf( "\n" );
			}
			if ( !function )
			{
				Usage();
			}
			delete monitor;
		}
		else
		{
			fprintf( stderr, "Error, invalid monitor id %d\n", mon_id );
			exit( -1 );
		}
	}
	else
	{
		if ( function & ZMU_QUERY )
		{
#if ZM_HAS_V4L
			char vidString[0x10000] = "";
			bool ok = LocalCamera::GetCurrentSettings( device, vidString, v4lVersion, verbose );
			printf( "%s", vidString );
			exit( ok?0:-1 );
#else // ZM_HAS_V4L
			fprintf( stderr, "Error, video4linux is required for device querying\n" );
            exit( -1 );
#endif // ZM_HAS_V4L
		}

		if ( function & ZMU_LIST )
		{
           char sql[ZM_SQL_SML_BUFSIZ];
			strncpy( sql, "select Id, Function+0 from Monitors", sizeof(sql) );
			if ( !verbose )
			{
				strncat( sql, " where Function != 'None'", sizeof(sql)-strlen(sql) );
			}
			strncat( sql, " order by Id asc", sizeof(sql)-strlen(sql) );

			if ( mysql_query( &dbconn, sql ) )
			{
				Error( "Can't run query: %s", mysql_error( &dbconn ) );
				exit( mysql_errno( &dbconn ) );
			}

			MYSQL_RES *result = mysql_store_result( &dbconn );
			if ( !result )
			{
				Error( "Can't use query result: %s", mysql_error( &dbconn ) );
				exit( mysql_errno( &dbconn ) );
			}
			int n_monitors = mysql_num_rows( result );
			Debug( 1, "Got %d monitors", n_monitors );

			printf( "%4s%5s%6s%9s%14s%6s%6s%8s%8s\n", "Id", "Func", "State", "TrgState", "LastImgTim", "RdIdx", "WrIdx", "LastEvt", "FrmRate" );
			for( int i = 0; MYSQL_ROW dbrow = mysql_fetch_row( result ); i++ )
			{
				int mon_id = atoi(dbrow[0]);
				int function = atoi(dbrow[1]);
				if ( !user || user->canAccess( mon_id ) )
				{
					if ( function > 1 )
					{
						Monitor *monitor = Monitor::Load( mon_id, false, Monitor::QUERY );
						if ( monitor )
						{
							struct timeval tv = monitor->GetTimestamp();
							printf( "%4d%5d%6d%9d%11ld.%02ld%6d%6d%8d%8.2f\n",
								monitor->Id(),
								function,
								monitor->GetState(),
								monitor->GetTriggerState(),
								tv.tv_sec, tv.tv_usec/10000,
								monitor->GetLastReadIndex(),
								monitor->GetLastWriteIndex(),
								monitor->GetLastEvent(),
								monitor->GetFPS()
							);
							delete monitor;
						}
					}
					else
					{
						struct timeval tv = { 0, 0 };
						printf( "%4d%5d%6d%9d%11ld.%02ld%6d%6d%8d%8.2f\n",
							mon_id,
							function,
							0,
							0,
							tv.tv_sec, tv.tv_usec/10000,
							0,
							0,
							0,
							0.0
						);
					}
				}
			}
			mysql_free_result( result );
		}
	}
	delete user;

	return( 0 );
}
Beispiel #11
0
static int async1(MYSQL *my)
{
  int err= 0, rc;
  MYSQL mysql, *ret;
  MYSQL_RES *res;
  MYSQL_ROW row;
  int status;
  uint default_timeout;
  int i;

  if (skip_async)
    return SKIP;

  for (i=0; i < 100; i++)
  {

    mysql_init(&mysql);
    rc= mysql_options(&mysql, MYSQL_OPT_NONBLOCK, 0);
    check_mysql_rc(rc, (MYSQL *)&mysql);

    /* set timeouts to 300 microseconds */
    default_timeout= 300;
    mysql_options(&mysql, MYSQL_OPT_READ_TIMEOUT, &default_timeout);
    mysql_options(&mysql, MYSQL_OPT_CONNECT_TIMEOUT, &default_timeout);
    mysql_options(&mysql, MYSQL_OPT_WRITE_TIMEOUT, &default_timeout);
    mysql_options(&mysql, MYSQL_READ_DEFAULT_GROUP, "myapp");

    /* Returns 0 when done, else flag for what to wait for when need to block. */
    status= mysql_real_connect_start(&ret, &mysql, hostname, username, password, NULL,
                                     0, NULL, 0);
    while (status)
    {
      status= wait_for_mysql(&mysql, status);
      status= mysql_real_connect_cont(&ret, &mysql, status);
    }
    FAIL_IF(!ret, "Failed to mysql_real_connect()");

    status= mysql_real_query_start(&err, &mysql, SL("SHOW STATUS"));
    while (status)
    {
      status= wait_for_mysql(&mysql, status);
      status= mysql_real_query_cont(&err, &mysql, status);
    }
    FAIL_IF(err, "mysql_real_query() returns error");

    /* This method cannot block. */
    res= mysql_use_result(&mysql);
    FAIL_IF(!res, "mysql_use_result() returns error");

    for (;;)
    {
      status= mysql_fetch_row_start(&row, res);
      while (status)
      {
        status= wait_for_mysql(&mysql, status);
        status= mysql_fetch_row_cont(&row, res, status);
      }
      if (!row)
        break;
    }
    FAIL_IF(mysql_errno(&mysql), "Got error while retrieving rows");
    mysql_free_result(res);

    /*
      mysql_close() sends a COM_QUIT packet, and so in principle could block
      waiting for the socket to accept the data.
      In practise, for many applications it will probably be fine to use the
      blocking mysql_close().
     */
    status= mysql_close_start(&mysql);
    while (status)
    {
      status= wait_for_mysql(&mysql, status);
      status= mysql_close_cont(&mysql, status);
    }
  }
  return OK;
}
Beispiel #12
0
int main( int argc, char *argv[] )
{
    zmLoadConfig();

    logInit( "zmfix" );
    logCapLevel( Logger::ERROR );

    // Only do registered devices
    static char sql[ZM_SQL_SML_BUFSIZ];
    snprintf( sql, sizeof(sql), "select distinct Device from Monitors where not isnull(Device) and Type = 'Local'" );
    if ( mysql_query( &dbconn, sql ) )
    {
        Error( "Can't run query: %s", mysql_error( &dbconn ) );
        exit( mysql_errno( &dbconn ) );
    }

    MYSQL_RES *result = mysql_store_result( &dbconn );
    if ( !result )
    {
        Error( "Can't use query result: %s", mysql_error( &dbconn ) );
        exit( mysql_errno( &dbconn ) );
    }

    for( int i = 0; MYSQL_ROW dbrow = mysql_fetch_row( result ); i++ )
    {
        fixDevice( dbrow[0] );
    }

    if ( mysql_errno( &dbconn ) )
    {
        Error( "Can't fetch row: %s", mysql_error( &dbconn ) );
        exit( mysql_errno( &dbconn ) );
    }
    // Yadda yadda
    mysql_free_result( result );

    snprintf( sql, sizeof(sql), "select distinct ControlDevice from Monitors where not isnull(ControlDevice)" );
    if ( mysql_query( &dbconn, sql ) )
    {
        Error( "Can't run query: %s", mysql_error( &dbconn ) );
        exit( mysql_errno( &dbconn ) );
    }

    result = mysql_store_result( &dbconn );
    if ( !result )
    {
        Error( "Can't use query result: %s", mysql_error( &dbconn ) );
        exit( mysql_errno( &dbconn ) );
    }

    for( int i = 0; MYSQL_ROW dbrow = mysql_fetch_row( result ); i++ )
    {
        fixDevice( dbrow[0] );
    }

    if ( mysql_errno( &dbconn ) )
    {
        Error( "Can't fetch row: %s", mysql_error( &dbconn ) );
        exit( mysql_errno( &dbconn ) );
    }
    // Yadda yadda
    mysql_free_result( result );

    if ( config.opt_x10 )
    {
        if ( config.x10_device )
        {
            fixDevice( config.x10_device );
        }
    }

    return( 0 );
}
Beispiel #13
0
void GScr_mysql_errno(int entityIndex) {
    MYSQL *m = (MYSQL*)Scr_GetInt(0);
    Scr_AddInt(mysql_errno(m));
}
Beispiel #14
0
static int test1(MYSQL *mysql)
{
  MYSQL_ROW row;
  MYSQL_RES *res;
  int rc;

  MYSQL *my= mysql_init(NULL);
  FAIL_IF(!my, "mysql_init() failed");

  mysql_options(my, MYSQL_DATABASE_DRIVER, "sqlite");

  FAIL_IF(!mysql_real_connect(my, hostname, username, password, (schema) ? schema : "test",
                         port, socketname, 0), mysql_error(my));

  diag("Server name: %s", mysql_get_server_name(my));

  diag("Connected to: %s (%lu)", mysql_get_server_info(my), mysql_get_server_version(my));

  rc= mysql_query(my, "CREATE TABLE t1 (a int, b varchar(255))");
  rc= mysql_query(my, "DELETE FROM t1");
  check_mysql_rc(rc, my);

  rc= mysql_query(my, "BEGIN");
  check_mysql_rc(rc, my);
  rc= mysql_query(my, "INSERT INTO t1 VALUES (1, 'Monty')");
  check_mysql_rc(rc, my);
  rc= mysql_query(my, "INSERT INTO t1 VALUES (2, 'Serg')");
  check_mysql_rc(rc, my);
  rc= mysql_query(my, "INSERT INTO t1 VALUES (3, 'Holyfoot')");
  check_mysql_rc(rc, my);
  rc= mysql_query(my, "INSERT INTO t1 VALUES (4, 'Rasmus')");
  check_mysql_rc(rc, my);
  rc= mysql_query(my, "INSERT INTO t1 VALUES (5, 'Sanja')");
  check_mysql_rc(rc, my);
  rc= mysql_query(my, "COMMIT");
  check_mysql_rc(rc, my);

  rc= mysql_query(my, "SELECT a,b FROM t1");
  check_mysql_rc(rc, my);
  res= mysql_use_result(my);
  FAIL_IF(!res, mysql_error(my));

  while ((row= mysql_fetch_row(res)) != NULL)
  {
    FAIL_IF(mysql_num_fields(res) != 2, "Got the wrong number of fields");
  }
  FAIL_IF(mysql_num_rows(res) != 5, "expected 5 rows");
  FAIL_IF(mysql_errno(my), mysql_error(my));

  mysql_free_result(res);

  rc= mysql_query(my, "SELECT a FROM t1");
  check_mysql_rc(rc, my);
  res= mysql_use_result(my);
  mysql_free_result(res);

  FAIL_IF(mysql_errno(my), mysql_error(my));

  mysql_close(my);

  return OK;
}
Beispiel #15
0
int main(int argc, char *argv[], char *envp[])
{
/* int i;	*/
  int res;
  int status;
  const char *userp = getenv("USER");	/* vem är inloggad?	*/
  char databas[25]="olfix";
  char usr[21];				/* userid 20070219 utökat från 15 till 21 tecken */

  char temp1a[]="UPDATE VALUTA SET LAND = ";
  char temp1b[]=" WHERE VALUTAID = ";
  char temp1c[]="SALJ = ";
  char temp1d[]="KOP = ";
  char temp1e[]="BETECKNING = ";
  char temp2[]="\"";
  char temp3[]=",";
  char temp5[200]="";
  char valuta[4]="";
  char land[16]="";
  char kop[15]="";
  char salj[15]="";
  char beteck[16]="";

  if (argc < 2){
	fprintf(stderr,"Error: Valuta saknas!\n");
	exit(0);
  }

/* ================================================================================ */
/* 		Val av databas, START						    */
/* ================================================================================ */
/*	fprintf(stderr,"1. host=%s\n",host);	*/
  status = which_host(envp);			// 20071208
	fprintf(stdout,"host=%s ",host);	/* Det ska vara ett mellanslag i slutet! */
  if (status != 0)
	exit(status);


  status = which_database(envp);

  if (status != 0)
	exit(status);

  strncpy(usr,userp,sizeof(usr));			/* Den inloggades userid 20070219 */
/*  fprintf(stderr,"status=%d ANTARG=%d len(database)=%d\n",status,ANTARG,strlen(database));	*/
  if (argc < ANTARG+1){
    	if (strlen(database)!= 0){
		strncpy(databas,database,sizeof(databas));		/* 2005-02-24	*/
	}else{
  		strncpy(databas,"olfixtst",15);	/* olfixtst = testföretag	*/
	}
  }else{
	if (strlen(argv[ANTARG]) != 0){
  		if (strncmp(argv[ANTARG],"99",2)==0){
			strncpy(databas,"olfixtst",15);
		}else{
  			strncpy(databas,argv[ANTARG],15);
  		}
  	}
  }
/*  fprintf(stderr,"ANTARG=%d,argv[ANTARG]=%s\n",ANTARG,argv[ANTARG]);	*/
/* Om usr (userid) börjar på 'test' eller 'prov' använd databas 'olfixtst' */
  if (strncmp(usr,"test",4)==0 || strncmp(usr,"prov",4)==0 ) {
  	strncpy(databas,"olfixtst",15);
  }
/* fprintf(stderr,"Databas=%s\n",databas);	*/
/* ================================================================================ */
/* 		Val av databas, END!						    */
/* ================================================================================ */

  strncpy(valuta,argv[1],sizeof(valuta));		/* 2005-02-24	*/
  strncpy(land,argv[2],sizeof(land));			/* 2005-02-24	*/
  strncpy(salj,argv[3],sizeof(salj));			/* 2005-02-24	*/
  strncpy(kop,argv[4],sizeof(kop));			/* 2005-02-24	*/
  strncpy(beteck,argv[5],sizeof(beteck));		/* 2005-02-24	*/

  strncpy(temp5,temp1a,strlen(temp1a));
/* UPDATE VALUTA SET LAND =   */
  strncat(temp5,temp2,strlen(temp2));
/* UPDATE VALUTA SET LAND = "   */
  strncat(temp5,land,strlen(land));
/* UPDATE VALUTA SET LAND ="Sverige   */
  strncat(temp5,temp2,strlen(temp2)); /*  "     */
  strncat(temp5,temp3,strlen(temp3)); /*  ,     */
/* UPDATE VALUTA SET LAND ="Sverige", */
  strncat(temp5,temp1c,strlen(temp1c));
/* UPDATE VALUTA SET LAND ="Sverige",SALJ =    */
  strncat(temp5,temp2,strlen(temp2)); /*  "     */
  strncat(temp5,salj,strlen(salj));
/* UPDATE VALUTA SET LAND ="Sverige",SALJ = "1.01    */
  strncat(temp5,temp2,strlen(temp2));  /*  "     */
  strncat(temp5,temp3,strlen(temp3)); /*  ,     */
  strncat(temp5,temp1d,strlen(temp1d));
/* UPDATE VALUTA SET LAND ="Sverige",SALJ = "1.01",KOP =   */
  strncat(temp5,temp2,strlen(temp2)); /*  "     */
  strncat(temp5,kop,strlen(kop));
/* UPDATE VALUTA SET LAND = "Sverige",SALJ = "1.01",KOP = "1.02 */
  strncat(temp5,temp2,strlen(temp2)); /*  "     */
  strncat(temp5,temp3,strlen(temp3)); /*  ,     */
/* UPDATE VALUTA SET LAND = "Sverige",SALJ = "1.01",KOP = "1.02", */
  strncat(temp5,temp1e,strlen(temp1e));
  strncat(temp5,temp2,strlen(temp2)); /*  "     */
/* UPDATE VALUTA SET LAND = "Sverige",SALJ = "1.01",KOP = "1.02",BETECKNING = "  */
  strncat(temp5,beteck,strlen(beteck));
/* UPDATE VALUTA SET LAND = "Sverige",SALJ = "1.01",KOP = "1.02",BETECKNING = "Kronor  */
  strncat(temp5,temp2,strlen(temp2)); /*  "     */
  strncat(temp5,temp1b,strlen(temp1b));
/* UPDATE VALUTA SET LAND = "Sverige",SALJ = "1.01",KOP = "1.02",BETECKNING = "Kronor" WHERE VALUTAID = */
  strncat(temp5,temp2,strlen(temp2)); /*  "     */
  strncat(temp5,valuta,strlen(valuta));
  strncat(temp5,temp2,strlen(temp2)); /*  "     */
/* UPDATE VALUTA SET LAND = "Sverige",SALJ = "1.01",KOP = "1.02",BETECKNING = "Kronor" WHERE VALUTAID = "SEK"*/

  fprintf(stderr,"VALCHG temp5=%s\n",temp5);	

  mysql_init(&my_connection);

  if (mysql_real_connect(&my_connection, host,  "olfix", "olfix", databas, 0, NULL, 0)){
/*	fprintf(stdout,"VALCHG_Connection success\n");		*/

    res = mysql_query(&my_connection,temp5);

  	if (!res){
		fprintf(stdout,"OK: VALCHG Inserted %lu rows\n",
			(unsigned long)mysql_affected_rows(&my_connection));
        }else{
/*	fprintf(stderr,"stderr-VALCHG:INSERT error: %d  %s\n", mysql_errno(&my_connection),
					mysql_error(&my_connection));
*/
	fprintf(stderr,"Error: VALCHG INSERT error: %d  %s\n", mysql_errno(&my_connection),
					mysql_error(&my_connection));
	}
	mysql_close(&my_connection);

 } else {
	fprintf(stderr,"Error: VALCHG Connection failed\n");
    	if (mysql_errno(&my_connection))   {
    		fprintf(stderr,"Error: VALCHG Connection error %d:  %s\n",
			mysql_errno(&my_connection), mysql_error(&my_connection));
	}
    }
  fprintf(stdout,"\n");
  return EXIT_SUCCESS;
}
Beispiel #16
0
int driverMySQL_prepareStatement(struct xsb_queryHandle* handle)
{
  struct driverMySQL_preparedresultset* rs;
  MYSQL* mysql;
  MYSQL_STMT* stmt;
  MYSQL_RES* res;
  int i;
  char* sqlQuery;
  int numResultCols;
  MYSQL_FIELD* field;

  sqlQuery = (char *)malloc((strlen(handle->query) + 1) * sizeof(char));
  strcpy(sqlQuery, handle->query);
	
  mysql = NULL;	

  for (i = 0 ; i < numHandles ; i++)
    {
      if (!strcmp(mysqlHandles[i]->handle, handle->connHandle->handle))
	{
	  mysql = mysqlHandles[i]->mysql;
	  break;
	}
    }

  if ((stmt = mysql_stmt_init(mysql)) == NULL)
    {
      errorMesg = "mysql_stmt_init() failed\n";
      //errorMesg = mysql_stmt_error(stmt);
      free(sqlQuery);
      sqlQuery = NULL;
      return FAILURE;		
    }
  if ( mysql_stmt_prepare(stmt, sqlQuery, (unsigned long)strlen(sqlQuery))) {
    errorMesg = mysql_stmt_error(stmt);
    free(sqlQuery);
    sqlQuery = NULL;
    return FAILURE;		
  }

  rs = (struct driverMySQL_preparedresultset *)malloc(sizeof(struct driverMySQL_preparedresultset));
  rs->statement = stmt;

  res = mysql_stmt_result_metadata(stmt);

  numResultCols = 0;
  if (res == NULL)
    {
      if (mysql_errno(mysql))
	{
	  errorMesg = mysql_stmt_error(stmt);
	  free(sqlQuery);
	  sqlQuery = NULL;
	  free(rs);
	  rs = NULL;
	  return FAILURE;
	}
    }
  else numResultCols = mysql_num_fields(res);

  rs->returnFields = numResultCols;

  handle->numParams = mysql_stmt_param_count(stmt);
  handle->numResultCols = rs->returnFields;
  handle->state = QUERY_BEGIN;
	
  rs->handle = handle;
  rs->bindResult = NULL;
	
  rs->metaInfo = (struct xsb_data **)malloc(rs->returnFields * sizeof(struct xsb_data *));
  for (i = 0 ; i < rs->returnFields ; i++)
    {
      rs->metaInfo[i] = (struct xsb_data *)malloc(sizeof(struct xsb_data));
      field = mysql_fetch_field_direct(res, i);
      rs->metaInfo[i]->type = driverMySQL_getXSBType(field);
      rs->metaInfo[i]->length = field->length;
    }
  prepQueries[numPrepQueries++] = rs;

  free(sqlQuery);
  sqlQuery = NULL;

  return rs->handle->numParams;
}
Beispiel #17
0
bool MySQLConnection::_Query(PreparedStatement* stmt, MYSQL_RES **pResult, uint64* pRowCount, uint32* pFieldCount)
{
    if (!m_Mysql)
        return false;

    uint32 index = stmt->m_index;
    {
        MySQLPreparedStatement* m_mStmt = GetPreparedStatement(index);
        ASSERT(m_mStmt);            // Can only be null if preparation failed, server side error or bad query
        m_mStmt->m_stmt = stmt;     // Cross reference them for debug output
        stmt->m_stmt = m_mStmt;     // TODO: Cleaner way

        stmt->BindParameters();

        MYSQL_STMT* msql_STMT = m_mStmt->GetSTMT();
        MYSQL_BIND* msql_BIND = m_mStmt->GetBind();

        uint32 _s = 0;
        if (sLog->GetSQLDriverQueryLogging())
            _s = getMSTime();

        if (mysql_stmt_bind_param(msql_STMT, msql_BIND))
        {
            uint32 lErrno = mysql_errno(m_Mysql);
            sLog->outSQLDriver("SQL(p): %s\n [ERROR]: [%u] %s",
                m_statementTable[index].query, lErrno, mysql_stmt_error(msql_STMT));

            if (_HandleMySQLErrno(lErrno))  // If it returns true, an error was handled succesfuly (ie reconnection)
                return _Query(stmt, pResult, pRowCount, pFieldCount);       // Try again

            m_mStmt->ClearParameters();
            return false;
        }

        if (mysql_stmt_execute(msql_STMT))
        {
            uint32 lErrno = mysql_errno(m_Mysql);
            sLog->outSQLDriver("SQL(p): %s\n [ERROR]: [%u] %s",
                m_statementTable[index].query, lErrno, mysql_stmt_error(msql_STMT));

            if (_HandleMySQLErrno(lErrno))  // If it returns true, an error was handled succesfuly (ie reconnection)
                return _Query(stmt, pResult, pRowCount, pFieldCount);      // Try again

            m_mStmt->ClearParameters();
            return false;
        }

        if (sLog->GetSQLDriverQueryLogging())
            sLog->outSQLDriver("[%u ms] SQL(p): %s",
                getMSTimeDiff(_s, getMSTime()), m_statementTable[index].query);

        m_mStmt->ClearParameters();

        *pResult = mysql_stmt_result_metadata(msql_STMT);
        *pRowCount = mysql_stmt_num_rows(msql_STMT);
        *pFieldCount = mysql_stmt_field_count(msql_STMT);

        return true;

    }
}
Beispiel #18
0
int main(int argc, char** argv) {
    // Инициализация подключения к dims
    frontend_db = mysql_init(NULL);
    if (frontend_db == NULL) {
        log_messages.printf(MSG_CRITICAL, "Error %u: %s\n", mysql_errno(frontend_db), mysql_error(frontend_db));
        exit(1);
    }
    // Подключение к БД dims
    if (mysql_real_connect(frontend_db, "localhost", "boincadm", "password!stronk!", "dihm1", 0, NULL, 0) == NULL) {
        log_messages.printf(MSG_CRITICAL, "Error %u: %s\n", mysql_errno(frontend_db), mysql_error(frontend_db));
        exit(1);
    }

    int retval;
    DB_APP app;     // http://boinc.berkeley.edu/doxygen/server/html/classDB__APP.html
    int i;
    char buf[256];

    strcpy(app.name, "");
    check_stop_daemons();
    g_argc = argc;
    g_argv = argv;
    for (i=1; i<argc; i++) {
         if (is_arg(argv[i], "sleep_interval")) {
            sleep_interval = atoi(argv[++i]);
        } else if (is_arg(argv[i], "d") || is_arg(argv[i], "debug_level")) {
            int dl = atoi(argv[++i]);
            log_messages.set_debug_level(dl);
            if (dl ==4) g_print_queries = true;
        } else if (is_arg(argv[i], "app")) {
            strcpy(app.name, argv[++i]);
        } else if (is_arg(argv[i], "dont_update_db")) {
            // This option is for testing your assimilator.  When set,
            // it ensures that the assimilator does not actually modify
            // the assimilate_state of the workunits, so you can run
            // your assimilator over and over again without affecting
            // your project.
            update_db = false;
        } else if (is_arg(argv[i], "help") || is_arg(argv[i], "h")) {
//            usage(argv);
        } else {
            log_messages.printf(MSG_CRITICAL, "Unrecognized arg: %s\n", argv[i]);
//            usage(argv);
        }
    }

    if (!strlen(app.name)) {
//        usage(argv);
    }

    retval = config.parse_file();
    if (retval) {
        log_messages.printf(MSG_CRITICAL, "Can't parse config.xml: %s\n", boincerror(retval));
        exit(1);
    }

    log_messages.printf(MSG_NORMAL, "Starting\n");

    retval = boinc_db.open(config.db_name, config.db_host, config.db_user, config.db_passwd);
    if (retval) {
        log_messages.printf(MSG_CRITICAL, "Can't open DB\n");
        exit(1);
    }
    sprintf(buf, "where name='%s'", app.name);
    retval = app.lookup(buf);
    if (retval) {
        log_messages.printf(MSG_CRITICAL, "Can't find app\n");
        exit(1);
    }
    install_stop_signal_handler();

    main_loop(app);
}
Beispiel #19
0
Logger::Level Logger::databaseLevel( Logger::Level databaseLevel )
{
  if ( databaseLevel > NOOPT )
  {
    databaseLevel = limit(databaseLevel);
    if ( mDatabaseLevel != databaseLevel )
    {
      if ( databaseLevel > NOLOG && mDatabaseLevel <= NOLOG )
      {
        if ( !mDbConnected )
        {
          if ( !mysql_init( &mDbConnection ) )
          {
            Fatal( "Can't initialise database connection: %s", mysql_error( &mDbConnection ) );
            exit( mysql_errno( &mDbConnection ) );
          }
          my_bool reconnect = 1;
          if ( mysql_options( &mDbConnection, MYSQL_OPT_RECONNECT, &reconnect ) )
            Fatal( "Can't set database auto reconnect option: %s", mysql_error( &mDbConnection ) );
          std::string::size_type colonIndex = staticConfig.DB_HOST.find( ":" );
          if ( colonIndex == std::string::npos )
          {
            if ( !mysql_real_connect( &mDbConnection, staticConfig.DB_HOST.c_str(), staticConfig.DB_USER.c_str(), staticConfig.DB_PASS.c_str(), NULL, 0, NULL, 0 ) ) 
            {
              Fatal( "Can't connect to database: %s", mysql_error( &mDbConnection ) );
              exit( mysql_errno( &mDbConnection ) );
            }
          }
          else
          {
            std::string dbHost = staticConfig.DB_HOST.substr( 0, colonIndex );
            std::string dbPortOrSocket = staticConfig.DB_HOST.substr( colonIndex+1 );
            if ( dbPortOrSocket[0] == '/' )
            {
              if ( !mysql_real_connect( &mDbConnection, NULL, staticConfig.DB_USER.c_str(), staticConfig.DB_PASS.c_str(), NULL, 0, dbPortOrSocket.c_str(), 0 ) )
              {
                Fatal( "Can't connect to database: %s", mysql_error( &mDbConnection ) );
                exit( mysql_errno( &mDbConnection ) );
              }  
            }
            else
            {
              if ( !mysql_real_connect( &mDbConnection, dbHost.c_str(), staticConfig.DB_USER.c_str(), staticConfig.DB_PASS.c_str(), NULL, atoi(dbPortOrSocket.c_str()), NULL, 0 ) )
              {
                Fatal( "Can't connect to database: %s", mysql_error( &mDbConnection ) );
                exit( mysql_errno( &mDbConnection ) );
              }
            }
          }
          unsigned long mysqlVersion = mysql_get_server_version( &mDbConnection );
          if ( mysqlVersion < 50019 )
            if ( mysql_options( &mDbConnection, MYSQL_OPT_RECONNECT, &reconnect ) )
              Fatal( "Can't set database auto reconnect option: %s", mysql_error( &mDbConnection ) );
          if ( mysql_select_db( &mDbConnection, staticConfig.DB_NAME.c_str() ) )
          {
            Fatal( "Can't select database: %s", mysql_error( &mDbConnection ) );
            exit( mysql_errno( &mDbConnection ) );
          }
          mDbConnected = true;
        }
      }
      mDatabaseLevel = databaseLevel;
    }
  }
  return( mDatabaseLevel );
}
Beispiel #20
0
void Event::AddFrame( Image *image, struct timeval timestamp, int score, Image *alarm_image )
{
    if ( !timestamp.tv_sec )
    {
        Debug( 1, "Not adding new frame, zero timestamp" );
        return;
    }

    frames++;

    static char event_file[PATH_MAX];
    snprintf( event_file, sizeof(event_file), capture_file_format, path, frames );

    Debug( 1, "Writing capture frame %d", frames );
    WriteFrameImage( image, timestamp, event_file );

    struct DeltaTimeval delta_time;
    DELTA_TIMEVAL( delta_time, timestamp, start_time, DT_PREC_2 );

    const char *frame_type = score>0?"Alarm":(score<0?"Bulk":"Normal");
    if ( score < 0 )
        score = 0;

    bool db_frame = (strcmp(frame_type,"Bulk") != 0) || ((frames%config.bulk_frame_interval)==0) || !frames;
    if ( db_frame )
    {

        Debug( 1, "Adding frame %d of type \"%s\" to DB", frames, frame_type );
        static char sql[ZM_SQL_MED_BUFSIZ];
        snprintf( sql, sizeof(sql), "insert into Frames ( EventId, FrameId, Type, TimeStamp, Delta, Score ) values ( %d, %d, '%s', from_unixtime( %ld ), %s%ld.%02ld, %d )", id, frames, frame_type, timestamp.tv_sec, delta_time.positive?"":"-", delta_time.sec, delta_time.fsec, score );
        if ( mysql_query( &dbconn, sql ) )
        {
            Error( "Can't insert frame: %s", mysql_error( &dbconn ) );
            exit( mysql_errno( &dbconn ) );
        }
        last_db_frame = frames;

        // We are writing a Bulk frame
        if ( !strcmp( frame_type,"Bulk") )
        {
            snprintf( sql, sizeof(sql), "update Events set Length = %s%ld.%02ld, Frames = %d, AlarmFrames = %d, TotScore = %d, AvgScore = %d, MaxScore = %d where Id = %d", delta_time.positive?"":"-", delta_time.sec, delta_time.fsec, frames, alarm_frames, tot_score, (int)(alarm_frames?(tot_score/alarm_frames):0), max_score, id );
            if ( mysql_query( &dbconn, sql ) )
            {
                Error( "Can't update event: %s", mysql_error( &dbconn ) );
                exit( mysql_errno( &dbconn ) );
            }
        }
    }

    end_time = timestamp;

    // We are writing an Alarm frame
    if ( !strcmp( frame_type,"Alarm") )
    {
        alarm_frames++;

        tot_score += score;
        if ( score > (int)max_score )
            max_score = score;

        if ( alarm_image )
        {
            snprintf( event_file, sizeof(event_file), analyse_file_format, path, frames );

            Debug( 1, "Writing analysis frame %d", frames );
            WriteFrameImage( alarm_image, timestamp, event_file, true );
        }
    }

    /* This makes viewing the diagnostic images impossible because it keeps deleting them
    if ( config.record_diag_images )
    {
        char diag_glob[PATH_MAX] = "";

        snprintf( diag_glob, sizeof(diag_glob), "%s/%d/diag-*.jpg", config.dir_events, monitor->Id() );
        glob_t pglob;
        int glob_status = glob( diag_glob, 0, 0, &pglob );
        if ( glob_status != 0 )
        {
            if ( glob_status < 0 )
            {
                Error( "Can't glob '%s': %s", diag_glob, strerror(errno) );
            }
            else
            {
                Debug( 1, "Can't glob '%s': %d", diag_glob, glob_status );
            }
        }
        else
        {
            char new_diag_path[PATH_MAX] = "";
            for ( int i = 0; i < pglob.gl_pathc; i++ )
            {
                char *diag_path = pglob.gl_pathv[i];

                char *diag_file = strstr( diag_path, "diag-" );

                if ( diag_file )
                {
                    snprintf( new_diag_path, sizeof(new_diag_path), general_file_format, path, frames, diag_file );

                    if ( rename( diag_path, new_diag_path ) < 0 )
                    {
                        Error( "Can't rename '%s' to '%s': %s", diag_path, new_diag_path, strerror(errno) );
                    }
                }
            }
        }
        globfree( &pglob );
    }
    */
}
Beispiel #21
0
int main()
{
    int ret = 0, status = 0;
    MYSQL *mysql;
    MYSQL_RES *result;

    mysql = mysql_init(NULL);
    mysql = mysql_real_connect(mysql, "localhost", "root", "jiangxin", "mydb61", 0, NULL, 0);
    if (mysql == NULL)
    {
        ret = mysql_errno(mysql);
        printf("%s", mysql_error(mysql));
        printf("func mysql_real_connect() err:%d\n", ret);
        return ret;
    }
    else
    {
        printf("conncet ok \n");
    }

    MYSQL_TIME ts;
    MYSQL_BIND bind[3];
    MYSQL_STMT *stmt;
    char query[1024] = "INSERT INTO test_table(date_field, time_field, timestamp_field) values(?,?,?)";

    stmt = mysql_stmt_init(mysql);
    if (!stmt)
    {
        fprintf(stderr, "mysql_stmt_init(), out of memory\n");
        exit(0);
    }
    if (mysql_stmt_prepare(stmt, query, strlen(query)))
    {
        fprintf(stderr, "\n mysql_stmt_prepare(), INSERT failed");
        fprintf(stderr, "\n %s", mysql_stmt_error(stmt));
        exit(0);
    }

    bind[0].buffer_type = MYSQL_TYPE_DATE;
    bind[0].buffer = (char *)&ts;
    bind[0].is_null = 0;
    bind[0].length = 0;

    bind[1] = bind[2] = bind[0];

    mysql_stmt_bind_param(stmt, bind);

    ts.year = 2002;
    ts.month = 02;
    ts.day = 03;

    ts.hour = 10;
    ts.minute = 45;
    ts.second = 20;

    mysql_stmt_execute(stmt);
    if (mysql_stmt_close(stmt))
    {
        fprintf(stderr, " failed while closing the statement\n");
        fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
        exit(0);
    }
    mysql_close(mysql);
}
Beispiel #22
0
Event::Event( Monitor *p_monitor, struct timeval p_start_time, const std::string &p_cause, const StringSetMap &p_noteSetMap ) :
    monitor( p_monitor ),
    start_time( p_start_time ),
    cause( p_cause ),
    noteSetMap( p_noteSetMap )
{
    if ( !initialised )
        Initialise();

    std::string notes;
    createNotes( notes );

    bool untimedEvent = false;
    if ( !start_time.tv_sec )
    {
        untimedEvent = true;
        gettimeofday( &start_time, 0 );
    }

    static char sql[ZM_SQL_MED_BUFSIZ];

    struct tm *stime = localtime( &start_time.tv_sec );
    snprintf( sql, sizeof(sql), "insert into Events ( MonitorId, Name, StartTime, Width, Height, Cause, Notes ) values ( %d, 'New Event', from_unixtime( %ld ), %d, %d, '%s', '%s' )", monitor->Id(), start_time.tv_sec, monitor->Width(), monitor->Height(), cause.c_str(), notes.c_str() );
    if ( mysql_query( &dbconn, sql ) )
    {
        Error( "Can't insert event: %s", mysql_error( &dbconn ) );
        exit( mysql_errno( &dbconn ) );
    }
    id = mysql_insert_id( &dbconn );
    if ( untimedEvent )
    {
        Warning( "Event %d has zero time, setting to current", id );
    }
    end_time.tv_sec = 0;
    frames = 0;
    alarm_frames = 0;
    tot_score = 0;
    max_score = 0;

    if ( config.use_deep_storage )
    {
        char *path_ptr = path;
        path_ptr += snprintf( path_ptr, sizeof(path), "%s/%d", config.dir_events, monitor->Id() );

        int dt_parts[6];
        dt_parts[0] = stime->tm_year-100;
        dt_parts[1] = stime->tm_mon+1;
        dt_parts[2] = stime->tm_mday;
        dt_parts[3] = stime->tm_hour;
        dt_parts[4] = stime->tm_min;
        dt_parts[5] = stime->tm_sec;

        char date_path[PATH_MAX] = "";
        char time_path[PATH_MAX] = "";
        char *time_path_ptr = time_path;
        for ( unsigned int i = 0; i < sizeof(dt_parts)/sizeof(*dt_parts); i++ )
        {
            path_ptr += snprintf( path_ptr, sizeof(path)-(path_ptr-path), "/%02d", dt_parts[i] );

            struct stat statbuf;
            errno = 0;
            stat( path, &statbuf );
            if ( errno == ENOENT || errno == ENOTDIR )
            {
                if ( mkdir( path, 0755 ) )
                {
                    Fatal( "Can't mkdir %s: %s", path, strerror(errno));
                }
            }
            if ( i == 2 )
                strncpy( date_path, path, sizeof(date_path) );
            else if ( i >= 3 )
                time_path_ptr += snprintf( time_path_ptr, sizeof(time_path)-(time_path_ptr-time_path), "%s%02d", i>3?"/":"", dt_parts[i] );
        }
        char id_file[PATH_MAX];
        // Create event id symlink
        snprintf( id_file, sizeof(id_file), "%s/.%d", date_path, id );
        if ( symlink( time_path, id_file ) < 0 )
            Fatal( "Can't symlink %s -> %s: %s", id_file, path, strerror(errno));
        // Create empty id tag file
        snprintf( id_file, sizeof(id_file), "%s/.%d", path, id );
        if ( FILE *id_fp = fopen( id_file, "w" ) )
            fclose( id_fp );
        else
            Fatal( "Can't fopen %s: %s", id_file, strerror(errno));
    }
    else
    {
        snprintf( path, sizeof(path), "%s/%d/%d", config.dir_events, monitor->Id(), id );

        struct stat statbuf;
        errno = 0;
        stat( path, &statbuf );
        if ( errno == ENOENT || errno == ENOTDIR )
        {
            if ( mkdir( path, 0755 ) )
            {
                Error( "Can't mkdir %s: %s", path, strerror(errno));
            }
        }
        char id_file[PATH_MAX];
        // Create empty id tag file
        snprintf( id_file, sizeof(id_file), "%s/.%d", path, id );
        if ( FILE *id_fp = fopen( id_file, "w" ) )
            fclose( id_fp );
        else
            Fatal( "Can't fopen %s: %s", id_file, strerror(errno));
    }
    last_db_frame = 0;
}
Beispiel #23
0
void DelRules(char const *cCluster)
{
        MYSQL_RES *res;
        MYSQL_ROW field;

	if(!guSilent) printf("DelRules() start\n");
	unsigned uCluster=uGetCluster(cCluster);
	if(!uCluster)
	{
		logfileLine("DelRules cluster not found",cCluster);
		return;
	}
	//We only need the large sum with the dayofweek, still testing...
	sprintf(gcQuery,"SELECT tRule.uRule,"
			" SUM( IF(tTimeInterval.cStartDate='',1,DATE(NOW())>=tTimeInterval.cStartDate)"
			" AND IF(tTimeInterval.cEndDate='',1,DATE(NOW())<=tTimeInterval.cEndDate)),"
			" SUM(IF(tTimeInterval.cStartTime='',1,TIME(NOW())>=tTimeInterval.cStartTime)"
			" AND IF(tTimeInterval.cEndTime='',1,TIME(NOW())<=tTimeInterval.cEndTime)),"
			" SUM("
			" IF(INSTR(tTimeInterval.cDaysOfWeek,DAYOFWEEK(NOW()))>0,1,0)"
			" AND IF(tTimeInterval.cStartTime='',1,TIME(NOW())>=tTimeInterval.cStartTime)"
			" AND IF(tTimeInterval.cEndTime='',1,TIME(NOW())<=tTimeInterval.cEndTime)"
			" AND IF(tTimeInterval.cStartDate='',1,DATE(NOW())>=tTimeInterval.cStartDate)"
			" AND IF(tTimeInterval.cEndDate='',1,DATE(NOW())<=tTimeInterval.cEndDate)"
			" ),"
			" GROUP_CONCAT(tTimeInterval.cStartDate),"
			" GROUP_CONCAT(tTimeInterval.cEndDate),"
			" GROUP_CONCAT(tTimeInterval.cStartTime),"
			" GROUP_CONCAT(tTimeInterval.cEndTime),"
			" GROUP_CONCAT(tTimeInterval.cDaysOfWeek)"
			" FROM tRule,tGroupGlue,tTimeInterval"
			" WHERE tTimeInterval.uTimeInterval=tGroupGlue.uKey"
			" AND tGroupGlue.uGroup=tRule.uRule"
			" AND tGroupGlue.uGroupType=1"
			" AND tRule.uCluster=%u"
			" GROUP BY tRule.uRule",uCluster);
	mysql_query(&gMysql,gcQuery);
	if(mysql_errno(&gMysql))
	{
		printf(gcQuery);
		logfileLine("DelRules",mysql_error(&gMysql));
		mysql_close(&gMysql);
		exit(2);
	}
        res=mysql_store_result(&gMysql);
	while((field=mysql_fetch_row(res)))
	{
		char cKey[100];
		unsigned rc;
		sprintf(cKey,"%s-rule",field[0]);
		if(!guSilent)
		{
			printf("Date:%s Time:%s cDaysOfWeek:%s\n",
						field[1],field[2],field[3]);
			printf("cStartDate:%s cEndDate:%s cStartTime:%s cEndTime:%s cDaysOfWeek:%s\n",
						field[4],field[5],field[6],field[7],field[8]);
		}
		unsigned uDateConditionMet=0;
		unsigned uTimeConditionMet=0;
		unsigned uDayConditionMet=0;
		sscanf(field[1],"%u",&uDateConditionMet);
		sscanf(field[2],"%u",&uTimeConditionMet);
		sscanf(field[3],"%u",&uDayConditionMet);
		if(uDateConditionMet && uTimeConditionMet && uDayConditionMet)
			continue;
		//else try to delete the memcached rule
		rc=memcached_delete(gsMemc,cKey,strlen(cKey),(time_t)0);
		if(rc!=MEMCACHED_SUCCESS)
		{
			if(guLogLevel>2)
			{
				logfileLine("DelRules not found",cKey);
			}
			if(!guSilent) printf("DelRules() %s not found\n",cKey);
		}
		else
		{
			if(guLogLevel>2)
			{
				logfileLine("DelRules",cKey);
			}
			if(!guSilent) printf("DelRules() %s\n",cKey);
		}
	}//while rules
	if(!guSilent) printf("DelRules() end\n");

}//void DelRules()
Beispiel #24
0
bool EventStream::loadEventData( int event_id )
{
    static char sql[ZM_SQL_MED_BUFSIZ];

    snprintf( sql, sizeof(sql), "select M.Id, M.Name, E.Frames, unix_timestamp( StartTime ) as StartTimestamp, max(F.Delta)-min(F.Delta) as Duration from Events as E inner join Monitors as M on E.MonitorId = M.Id inner join Frames as F on E.Id = F.EventId where E.Id = %d group by E.Id", event_id );

    if ( mysql_query( &dbconn, sql ) )
    {
        Error( "Can't run query: %s", mysql_error( &dbconn ) );
        exit( mysql_errno( &dbconn ) );
    }

    MYSQL_RES *result = mysql_store_result( &dbconn );
    if ( !result )
    {
        Error( "Can't use query result: %s", mysql_error( &dbconn ) );
        exit( mysql_errno( &dbconn ) );
    }

    if ( !mysql_num_rows( result ) )
    {
        Fatal( "Unable to load event %d, not found in DB", event_id );
    }

    MYSQL_ROW dbrow = mysql_fetch_row( result );

    if ( mysql_errno( &dbconn ) )
    {
        Error( "Can't fetch row: %s", mysql_error( &dbconn ) );
        exit( mysql_errno( &dbconn ) );
    }

    delete event_data;
    event_data = new EventData;
    event_data->event_id = event_id;
    event_data->monitor_id = atoi( dbrow[0] );
    event_data->start_time = atoi(dbrow[3]);
    if ( config.use_deep_storage )
    {
        struct tm *event_time = localtime( &event_data->start_time );
        if ( config.dir_events[0] == '/' )
            snprintf( event_data->path, sizeof(event_data->path), "%s/%ld/%02d/%02d/%02d/%02d/%02d/%02d", config.dir_events, event_data->monitor_id, event_time->tm_year-100, event_time->tm_mon+1, event_time->tm_mday, event_time->tm_hour, event_time->tm_min, event_time->tm_sec );
        else
            snprintf( event_data->path, sizeof(event_data->path), "%s/%s/%ld/%02d/%02d/%02d/%02d/%02d/%02d", staticConfig.PATH_WEB.c_str(), config.dir_events, event_data->monitor_id, event_time->tm_year-100, event_time->tm_mon+1, event_time->tm_mday, event_time->tm_hour, event_time->tm_min, event_time->tm_sec );
    }
    else
    {
        if ( config.dir_events[0] == '/' )
            snprintf( event_data->path, sizeof(event_data->path), "%s/%ld/%ld", config.dir_events, event_data->monitor_id, event_data->event_id );
        else
            snprintf( event_data->path, sizeof(event_data->path), "%s/%s/%ld/%ld", staticConfig.PATH_WEB.c_str(), config.dir_events, event_data->monitor_id, event_data->event_id );
    }
    event_data->frame_count = dbrow[2] == NULL ? 0 : atoi(dbrow[2]);
    event_data->duration = atof(dbrow[4]);

    updateFrameRate( (double)event_data->frame_count/event_data->duration );

    mysql_free_result( result );

    snprintf( sql, sizeof(sql), "select FrameId, unix_timestamp( `TimeStamp` ), Delta from Frames where EventId = %d order by FrameId asc", event_id );
    if ( mysql_query( &dbconn, sql ) )
    {
        Error( "Can't run query: %s", mysql_error( &dbconn ) );
        exit( mysql_errno( &dbconn ) );
    }

    result = mysql_store_result( &dbconn );
    if ( !result )
    {
        Error( "Can't use query result: %s", mysql_error( &dbconn ) );
        exit( mysql_errno( &dbconn ) );
    }

    event_data->n_frames = mysql_num_rows( result );

    event_data->frames = new FrameData[event_data->frame_count];
    int id, last_id = 0;
    time_t timestamp, last_timestamp = event_data->start_time;
    double delta, last_delta = 0.0;
    while ( ( dbrow = mysql_fetch_row( result ) ) )
    {
        id = atoi(dbrow[0]);
        timestamp = atoi(dbrow[1]);
        delta = atof(dbrow[2]);
        int id_diff = id - last_id;
        double frame_delta = (delta-last_delta)/id_diff;
        if ( id_diff > 1 )
        {
            for ( int i = last_id+1; i < id; i++ )
            {
                event_data->frames[i-1].timestamp = (time_t)(last_timestamp + ((i-last_id)*frame_delta));
                event_data->frames[i-1].offset = (time_t)(event_data->frames[i-1].timestamp-event_data->start_time);
                event_data->frames[i-1].delta = frame_delta;
                event_data->frames[i-1].in_db = false;
            }
        }
        event_data->frames[id-1].timestamp = timestamp;
        event_data->frames[id-1].offset = (time_t)(event_data->frames[id-1].timestamp-event_data->start_time);
        event_data->frames[id-1].delta = id>1?frame_delta:0.0;
        event_data->frames[id-1].in_db = true;
        last_id = id;
        last_delta = delta;
        last_timestamp = timestamp;
    }
    if ( mysql_errno( &dbconn ) )
    {
        Error( "Can't fetch row: %s", mysql_error( &dbconn ) );
        exit( mysql_errno( &dbconn ) );
    }

    //for ( int i = 0; i < 250; i++ )
    //{
    //Info( "%d -> %d @ %f (%d)", i+1, event_data->frames[i].timestamp, event_data->frames[i].delta, event_data->frames[i].in_db );
    //}

    mysql_free_result( result );

    if ( forceEventChange || mode == MODE_ALL_GAPLESS )
    {
        if ( replay_rate > 0 )
            curr_stream_time = event_data->frames[0].timestamp;
        else
            curr_stream_time = event_data->frames[event_data->frame_count-1].timestamp;
    }
    Debug( 2, "Event:%ld, Frames:%ld, Duration: %.2f", event_data->event_id, event_data->frame_count, event_data->duration );

    return( true );
}
Beispiel #25
0
//Testing: Will add the outbound gateways also since this will simplify the routing core
void AddGWs(char const *cCluster)
{
        MYSQL_RES *res;
        MYSQL_ROW field;
	unsigned uCount=0;

	if(!guSilent) printf("AddGWs() start\n");

	//every ip is a gateway
	sprintf(gcQuery,"SELECT tAddress.cIP,tAddress.uPort,tAddress.uPriority,tAddress.uWeight,tGateway.cHostname"
			" FROM tGateway,tCluster,tAddress"
			" WHERE tGateway.uCluster=tCluster.uCluster"
			" AND tAddress.uGateway=tGateway.uGateway"
			//" AND tGateway.uGatewayType=1"//DID Inbound
			" AND tCluster.cLabel='%s'"
				,cCluster);
	mysql_query(&gMysql,gcQuery);
	if(mysql_errno(&gMysql))
	{
		printf(gcQuery);
		logfileLine("AddGWs",mysql_error(&gMysql));
		mysql_close(&gMysql);
		exit(2);
	}
        res=mysql_store_result(&gMysql);
	while((field=mysql_fetch_row(res)))
	{
		char cKey[100];
		char cValue[256];
		unsigned rc;

		sprintf(cKey,"%.32s:%.8s-gw",field[0],field[1]);
		sprintf(cValue,"cDestinationIP=%.15s;uDestinationPort=%.5s;uType=1;uPriority=%.5s;uWeight=%.5s;uGroup=0;uLines=0;cHostname=%s;",
				field[0],field[1],field[2],field[3],field[4]);
		rc=memcached_set(gsMemc,cKey,strlen(cKey),cValue,strlen(cValue),(time_t)0,(uint32_t)0);
		if(rc!=MEMCACHED_SUCCESS)
		{
			if(guLogLevel>0)
			{
				logfileLine("AddGWs",cKey);
				logfileLine("AddGWs",cValue);
			}
		}
		else
		{
			uCount++;
		}
		if(!guSilent)
			printf("%s %s\n",cKey,cValue);
	}
	mysql_free_result(res);

	if(guLogLevel>0)
	{
		sprintf(gcQuery,"Added %u keys",uCount);
		logfileLine("AddGWs",gcQuery);
	}

	if(!guSilent) printf("AddGWs() end\n");

}//void AddGWs()
//-------------------------------------------------------------------------------------
bool DBInterfaceMysql::attach(const char* databaseName)
{
	if(!_g_installedWatcher)
	{
		initializeWatcher();
	}

	if(db_port_ == 0)
		db_port_ = 3306;
	
	if(databaseName != NULL)
		kbe_snprintf(db_name_, MAX_BUF, "%s", databaseName);

	hasLostConnection_ = false;

	try
	{
		pMysql_ = mysql_init(0);
		if(pMysql_ == NULL)
		{
			ERROR_MSG("DBInterfaceMysql::attach: mysql_init is error!\n");
			return false;
		}
		
		DEBUG_MSG(fmt::format("DBInterfaceMysql::attach: connect: {}:{} starting...\n", db_ip_, db_port_));

		int ntry = 0;

__RECONNECT:
		if(mysql_real_connect(mysql(), db_ip_, db_username_, 
    		db_password_, db_name_, db_port_, NULL, 0)) // CLIENT_MULTI_STATEMENTS  
		{
			if(mysql_select_db(mysql(), db_name_) != 0)
			{
				ERROR_MSG(fmt::format("DBInterfaceMysql::attach: Could not set active db[{}]\n",
					db_name_));

				detach();
				return false;
			}
		}
		else
		{
			if (mysql_errno(pMysql_) == 1049 && ntry++ == 0)
			{
				if (mysql())
				{
					::mysql_close(mysql());
					pMysql_ = NULL;
				}

				pMysql_ = mysql_init(0);
				if (pMysql_ == NULL)
				{
					ERROR_MSG("DBInterfaceMysql::attach: mysql_init is error!\n");
					return false;
				}

				if (mysql_real_connect(mysql(), db_ip_, db_username_,
					db_password_, NULL, db_port_, NULL, 0)) // CLIENT_MULTI_STATEMENTS  
				{
					this->createDatabaseIfNotExist();
					if (mysql_select_db(mysql(), db_name_) != 0)
					{
						goto __RECONNECT;
					}
				}
				else
				{
					goto __RECONNECT;
				}
			}
			else
			{
				ERROR_MSG(fmt::format("DBInterfaceMysql::attach: mysql_errno={}, mysql_error={}\n",
					mysql_errno(pMysql_), mysql_error(pMysql_)));

				detach();
				return false;
			}
		}

		if (mysql_set_character_set(mysql(), "utf8") != 0)
		{
			ERROR_MSG("DBInterfaceMysql::attach: Could not set client connection character set to UTF-8\n" );
			return false;
		}

		// 不需要关闭自动提交,底层会START TRANSACTION之后再COMMIT
		// mysql_autocommit(mysql(), 0);

		char characterset_sql[MAX_BUF];
		kbe_snprintf(characterset_sql, MAX_BUF, "ALTER DATABASE CHARACTER SET %s COLLATE %s", 
			characterSet_.c_str(), collation_.c_str());

		query(&characterset_sql[0], strlen(characterset_sql), false);
	}
	catch (std::exception& e)
	{
		ERROR_MSG(fmt::format("DBInterfaceMysql::attach: {}\n", e.what()));
		hasLostConnection_ = true;
		detach();
		return false;
	}

	bool ret = mysql() != NULL && ping();

	if(ret)
	{
		DEBUG_MSG(fmt::format("DBInterfaceMysql::attach: successfully! addr: {}:{}\n", db_ip_, db_port_));
	}

    return ret;
}
Beispiel #27
0
//Inbound gateways like PBXs do not require that we keep track of multiple DNS SRV records
//by their nature of being connection originators ONLY
//On the other hand we need to be able to try all available DNS records for PBXs when
//the origination is based on a DID.
void AddPBXs(char const *cCluster)
{
        MYSQL_RES *res;
        MYSQL_ROW field;
	unsigned uCount=0;

	if(!guSilent) printf("AddPBXs() start\n");

	sprintf(gcQuery,"SELECT tAddress.cIP,tAddress.uPort,tAddress.uPriority,tAddress.uWeight,"
			" tPBX.cHostname,IF(tGroupGlue.uGroup,tGroupGlue.uGroup,0),tPBX.uLines"
			" FROM tPBX LEFT JOIN tGroupGlue ON tPBX.uPBX=tGroupGlue.uKey AND tGroupGlue.uGroupType=5,tCluster,tAddress"
			" WHERE tPBX.uCluster=tCluster.uCluster"
			" AND tAddress.uPBX=tPBX.uPBX"
			" AND tCluster.cLabel='%s'"
				,cCluster);
	mysql_query(&gMysql,gcQuery);
	if(mysql_errno(&gMysql))
	{
		printf(gcQuery);
		logfileLine("AddPBXs",mysql_error(&gMysql));
		mysql_close(&gMysql);
		exit(2);
	}
        res=mysql_store_result(&gMysql);
	while((field=mysql_fetch_row(res)))
	{
		char cKey[100];
		char cValue[256];
		unsigned rc;

		//PBXs are gateways too. This makes the server run faster.
		sprintf(cKey,"%.32s:%.8s-gw",field[0],field[1]);
		sprintf(cValue,"cDestinationIP=%.15s;uDestinationPort=%.5s;uType=2;uPriority=%.5s;uWeight=%.5s;uGroup=%s;uLines=%s;cHostname=%.64s;",
				field[0],field[1],field[2],field[3],field[5],field[6],field[4]);
		rc=memcached_set(gsMemc,cKey,strlen(cKey),cValue,strlen(cValue),(time_t)0,(uint32_t)0);
		if(rc!=MEMCACHED_SUCCESS)
		{
			if(guLogLevel>0)
			{
				logfileLine("AddPBXs",cKey);
				logfileLine("AddPBXs",cValue);
			}
		}
		else
		{
			uCount++;
		}
		if(!guSilent)
			printf("%s %s\n",cKey,cValue);
	}
	mysql_free_result(res);

	if(guLogLevel>0)
	{
		sprintf(gcQuery,"Added %u keys",uCount);
		logfileLine("AddPBXs",gcQuery);
	}

	if(!guSilent) printf("AddPBXs() end\n");

}//void AddPBXs()
//-------------------------------------------------------------------------------------
int DBInterfaceMysql::getlasterror()
{
	return mysql_errno(pMysql_);
}
Beispiel #29
0
//Can be used to resolv a single GW if uGateway!=0
void DNSUpdateGW(char const *cCluster,unsigned uGateway)
{
        MYSQL_RES *res;
        MYSQL_ROW field;
	unsigned uCount=0;
	unsigned uRRCount=0;

	if(!guSilent) printf("DNSUpdateGW() start\n");

	//outbound GW only non empty cHostname
	sprintf(gcQuery,"SELECT tGateway.cHostname,tGateway.uGateway"
			" FROM tGateway,tCluster"
			" WHERE tGateway.uCluster=tCluster.uCluster"
			" AND tCluster.cLabel='%s'"
			" AND tGateway.uGatewayType=2"
			" AND tGateway.cHostname!=''"
			" AND IF(%u,tGateway.uGateway=%u,1)"
				,cCluster,uGateway,uGateway);
	mysql_query(&gMysql,gcQuery);
	if(mysql_errno(&gMysql))
	{
		printf(gcQuery);
		logfileLine("DNSUpdateGW",mysql_error(&gMysql));
		mysql_close(&gMysql);
		exit(2);
	}
        res=mysql_store_result(&gMysql);
	while((field=mysql_fetch_row(res)))
	{
		unsigned uA=0,uB=0,uC=0,uD=0;
		if(!guSilent)
			printf("%s\n",field[0]);

		//This has to be done first
		sscanf(field[1],"%u",&uGateway);

		//Handle special case where cDomain is an IPv4 number
		if(sscanf(field[0],"%u.%u.%u.%u",&uA,&uB,&uC,&uD)==4)
		{
			//Not sure if this is an exact test see RFC
			if(uA>0 && uA<256 && uB<256 && uC<256 && uD<256)
			{
				//5060,0,0 pattern it is not an A record
				UpdatetAddressForGateway(uGateway,field[0],5060,0,0);
				sprintf(gcQuery,"%s added as IP to %u\n",field[0],uGateway);
				if(!guSilent)
					printf(gcQuery);
				if(guLogLevel>0)
					logfileLine("DNSUpdateGW",gcQuery);
				continue;
			}
			//Matches pattern but out of range values
			logfileLine("DNSUpdateGW",field[0]);
		}
		uCount++;

		//DNS
		dns_host_t sDnsHost;
		dns_host_t sDnsHostSave;
		dns_host_t sDnsHost2;
		dns_host_t sDnsHostSave2;
		dns_srv_t sDnsSrv;
		char cHostname[128]={""};

		//SRV records
		sprintf(cHostname,"_sip._udp.%.99s",field[0]);
		sDnsHost=dns_resolve(cHostname,3);
		sDnsHostSave=sDnsHost;
		if(sDnsHost!=NULL)
		{
			if(!guSilent)
				printf("SRV records\n");
			sDnsSrv=(dns_srv_t)sDnsHost->rr;

			//Nested get A record
			sprintf(cHostname,"%.99s",sDnsSrv->name);
			sDnsHost2=dns_resolve(cHostname,1);
			sDnsHostSave2=sDnsHost2;
			if(sDnsHost2!=NULL)
			{
				UpdatetAddressForGateway(uGateway,(char *)sDnsHost2->rr,sDnsSrv->port,sDnsSrv->priority,sDnsSrv->weight);
				if(guLogLevel>3)
					logfileLine("DNSUpdateGW A",(char *)sDnsHost2->rr);
				uRRCount++;
				while(sDnsHost2->next!=NULL)
				{
					sDnsHost2=sDnsHost2->next;
					UpdatetAddressForGateway(uGateway,(char *)sDnsHost2->rr,sDnsSrv->port,sDnsSrv->priority,sDnsSrv->weight);
					if(guLogLevel>3)
						logfileLine("DNSUpdateGW A",(char *)sDnsHost2->rr);
					uRRCount++;
				}
			}
			//
			if(guLogLevel>3)
				logfileLine("DNSUpdateGW SRV",sDnsSrv->name);
			uRRCount++;
			while(sDnsHost->next!=NULL)
			{
				sDnsHost=sDnsHost->next;
				sDnsSrv=(dns_srv_t)sDnsHost->rr;
				//Nested get A record
				sprintf(cHostname,"%.99s",sDnsSrv->name);
				sDnsHost2=dns_resolve(cHostname,1);
				sDnsHostSave2=sDnsHost2;
				if(sDnsHost2!=NULL)
				{
					UpdatetAddressForGateway(uGateway,(char *)sDnsHost2->rr,sDnsSrv->port,sDnsSrv->priority,sDnsSrv->weight);
					if(guLogLevel>3)
						logfileLine("DNSUpdateGW A",(char *)sDnsHost2->rr);
					uRRCount++;
					while(sDnsHost2->next!=NULL)
					{
						sDnsHost2=sDnsHost2->next;
						UpdatetAddressForGateway(uGateway,(char *)sDnsHost2->rr,sDnsSrv->port,sDnsSrv->priority,sDnsSrv->weight);
						if(guLogLevel>3)
							logfileLine("DNSUpdateGW A",(char *)sDnsHost2->rr);
						uRRCount++;
					}
			}
			//
				if(guLogLevel>3)
					logfileLine("DNSUpdateGW SRV",sDnsSrv->name);
				uRRCount++;
			}
		}
		else
		{
			if(guLogLevel>4)
				logfileLine("DNSUpdateGW No SRV",cHostname);
		}
		dns_free(sDnsHostSave);

		//A records
		sprintf(cHostname,"%.99s",field[0]);
		sDnsHost=dns_resolve(cHostname,1);
		sDnsHostSave=sDnsHost;
		if(sDnsHost!=NULL)
		{
			UpdatetAddressForGateway(uGateway,(char *)sDnsHost->rr,5060,1000,100);
			if(guLogLevel>3)
				logfileLine("DNSUpdateGW A",(char *)sDnsHost->rr);
			uRRCount++;
			while(sDnsHost->next!=NULL)
			{
				sDnsHost=sDnsHost->next;
				UpdatetAddressForGateway(uGateway,(char *)sDnsHost->rr,5060,1000,100);
				if(guLogLevel>3)
					logfileLine("DNSUpdateGW A",(char *)sDnsHost->rr);
				uRRCount++;
			}
		}
		else
		{
			if(guLogLevel>0)
				logfileLine("DNSUpdateGW No A",cHostname);
			if(!guSilent)
				printf("No A records\n");
		}
		dns_free(sDnsHostSave);

		//Remove non updated in this pass records 300s 5min ago
		sprintf(gcQuery,"DELETE FROM tAddress"
				" WHERE tAddress.uGateway=%u AND uOwner=0"
				" AND ((uModDate>0 AND (uModDate<(UNIX_TIMESTAMP(NOW())-300))) OR (uModDate=0 AND uCreatedDate<(UNIX_TIMESTAMP(NOW())-300)))"
					,uGateway);
		mysql_query(&gMysql,gcQuery);
		if(mysql_errno(&gMysql))
		{
			printf(gcQuery);
			logfileLine("DNSUpdateGW",mysql_error(&gMysql));
			mysql_close(&gMysql);
			exit(2);
		}
		if(guLogLevel>0)
		{
			sprintf(gcQuery,"%lu stale tAddress records deleted",(long unsigned)mysql_affected_rows(&gMysql));
			logfileLine("DNSUpdateGW",gcQuery);
		}
	}
	mysql_free_result(res);

	if(guLogLevel>0)
	{
		sprintf(gcQuery,"Processed %u cHostnames updated %u tAddress records",uCount,uRRCount);
		logfileLine("DNSUpdateGW",gcQuery);
	}

	if(!guSilent) printf("DNSUpdateGW() end\n");
}//void DNSUpdateGW(char const *cCluster)
Beispiel #30
0
bool
DbUtil::runQuery(const char* sql,
                 const Properties& args,
                 SqlResultSet& rows){

  clear_error();
  rows.clear();
  if (!isConnected())
    return false;
  assert(m_mysql);

  g_debug << "runQuery: " << endl
          << " sql: '" << sql << "'" << endl;


  MYSQL_STMT *stmt= mysql_stmt_init(m_mysql);
  if (mysql_stmt_prepare(stmt, sql, (unsigned long)strlen(sql)))
  {
    report_error("Failed to prepare: ", m_mysql);
    return false;
  }

  uint params= mysql_stmt_param_count(stmt);
  MYSQL_BIND *bind_param = new MYSQL_BIND[params];
  NdbAutoObjArrayPtr<MYSQL_BIND> _guard(bind_param);

  memset(bind_param, 0, params * sizeof(MYSQL_BIND));

  for(uint i= 0; i < mysql_stmt_param_count(stmt); i++)
  {
    BaseString name;
    name.assfmt("%d", i);
    // Parameters are named 0, 1, 2...
    if (!args.contains(name.c_str()))
    {
      g_err << "param " << i << " missing" << endl;
      assert(false);
    }
    PropertiesType t;
    Uint32 val_i;
    const char* val_s;
    args.getTypeOf(name.c_str(), &t);
    switch(t) {
    case PropertiesType_Uint32:
      args.get(name.c_str(), &val_i);
      bind_param[i].buffer_type= MYSQL_TYPE_LONG;
      bind_param[i].buffer= (char*)&val_i;
      g_debug << " param" << name.c_str() << ": " << val_i << endl;
      break;
    case PropertiesType_char:
      args.get(name.c_str(), &val_s);
      bind_param[i].buffer_type= MYSQL_TYPE_STRING;
      bind_param[i].buffer= (char*)val_s;
      bind_param[i].buffer_length= (unsigned long)strlen(val_s);
      g_debug << " param" << name.c_str() << ": " << val_s << endl;
      break;
    default:
      assert(false);
      break;
    }
  }
  if (mysql_stmt_bind_param(stmt, bind_param))
  {
    report_error("Failed to bind param: ", m_mysql);
    mysql_stmt_close(stmt);
    return false;
  }

  if (mysql_stmt_execute(stmt))
  {
    report_error("Failed to execute: ", m_mysql);
    mysql_stmt_close(stmt);
    return false;
  }

  /*
    Update max_length, making it possible to know how big
    buffers to allocate
  */
  my_bool one= 1;
  mysql_stmt_attr_set(stmt, STMT_ATTR_UPDATE_MAX_LENGTH, (void*) &one);

  if (mysql_stmt_store_result(stmt))
  {
    report_error("Failed to store result: ", m_mysql);
    mysql_stmt_close(stmt);
    return false;
  }

  uint row= 0;
  MYSQL_RES* res= mysql_stmt_result_metadata(stmt);
  if (res != NULL)
  {
    MYSQL_FIELD *fields= mysql_fetch_fields(res);
    uint num_fields= mysql_num_fields(res);
    MYSQL_BIND *bind_result = new MYSQL_BIND[num_fields];
    NdbAutoObjArrayPtr<MYSQL_BIND> _guard1(bind_result);
    memset(bind_result, 0, num_fields * sizeof(MYSQL_BIND));

    for (uint i= 0; i < num_fields; i++)
    {
      unsigned long buf_len= sizeof(int);

      switch(fields[i].type){
      case MYSQL_TYPE_STRING:
        buf_len = fields[i].length + 1;
        break;
      case MYSQL_TYPE_VARCHAR:
      case MYSQL_TYPE_VAR_STRING:
        buf_len= fields[i].max_length + 1;
        break;
      case MYSQL_TYPE_LONGLONG:
        buf_len= sizeof(long long);
        break;
      case MYSQL_TYPE_LONG:
        buf_len = sizeof(long);
        break;
      default:
        break;
      }
      
      bind_result[i].buffer_type= fields[i].type;
      bind_result[i].buffer= malloc(buf_len);
      bind_result[i].buffer_length= buf_len;
      bind_result[i].is_null = (my_bool*)malloc(sizeof(my_bool));
      * bind_result[i].is_null = 0;
    }

    if (mysql_stmt_bind_result(stmt, bind_result)){
      report_error("Failed to bind result: ", m_mysql);
      mysql_stmt_close(stmt);
      return false;
    }

    while (mysql_stmt_fetch(stmt) != MYSQL_NO_DATA)
    {
      Properties curr(true);
      for (uint i= 0; i < num_fields; i++){
        if (* bind_result[i].is_null)
          continue;
        switch(fields[i].type){
        case MYSQL_TYPE_STRING:
	  ((char*)bind_result[i].buffer)[fields[i].max_length] = 0;
        case MYSQL_TYPE_VARCHAR:
        case MYSQL_TYPE_VAR_STRING:
          curr.put(fields[i].name, (char*)bind_result[i].buffer);
          break;

        case MYSQL_TYPE_LONGLONG:
          curr.put64(fields[i].name,
                     *(unsigned long long*)bind_result[i].buffer);
          break;

        default:
          curr.put(fields[i].name, *(int*)bind_result[i].buffer);
          break;
        }
      }
      rows.put("row", row++, &curr);
    }

    mysql_free_result(res);

    for (uint i= 0; i < num_fields; i++)
    {
      free(bind_result[i].buffer);
      free(bind_result[i].is_null);
    }
  }

  // Save stats in result set
  rows.put("rows", row);
  rows.put64("affected_rows", mysql_affected_rows(m_mysql));
  rows.put("mysql_errno", mysql_errno(m_mysql));
  rows.put("mysql_error", mysql_error(m_mysql));
  rows.put("mysql_sqlstate", mysql_sqlstate(m_mysql));
  rows.put64("insert_id", mysql_insert_id(m_mysql));

  mysql_stmt_close(stmt);
  return true;
}