rendered paste body[root@wlan-link progs_working_copy]# cat multi_burst.c
#include <stdlib.h>
#include <stdio.h>
#include <syslog.h>
#include <mysql/mysql.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <time.h>
#include "funcs.c"
MYSQL mysql;
char ip_full[16];
char *ID;
int min_speed[24];
int max_speed[24];
char *bg_add;
char *in_add;
char *ip_to_str (unsigned long int ip)
{
struct in_addr in;
in.s_addr = ip;
strcpy (ip_full, inet_ntoa (in));
return (char *) &ip_full;
};
void calc_delta(
char *uID,
char *mispeed,
char *maspeed,
char *mispd_bg,
char *maspd_bg,
char *mispd_inet,
char *maspd_inet,
char *mispd_out,
char *maspd_out,
char *ip,
char *iface,
char *oface,
int c_offset) {
MYSQL_RES *res;
MYSQL_ROW row;
char *ulID;
unsigned long sp;
unsigned long mspeed;
unsigned long mult;
int ins;
unsigned int nm;
unsigned long lm;
char *q;
q=malloc(1024);
mspeed=strtoul(maspeed,NULL,10);
nm=mspeed;
sprintf(q,"SELECT ID FROM UserLog WHERE UserID=%s AND State='A'",uID);
if (mysql_query(&mysql,q)) {
syslog(LOG_ERR,"Error in query: %s, ERROR: %s",q,mysql_error(&mysql));
goto ex_2;
};
res=mysql_store_result(&mysql);
if (mysql.affected_rows<1) {
mysql_free_result(res);
goto ex_2;
};
row=mysql_fetch_row(res);
ulID=strdup(row[0]);
sprintf(q,"SELECT max(LogTime) FROM log WHERE UserLogId=%s",row[0]);
mysql_free_result(res);
if (mysql_query(&mysql,q)) {
syslog(LOG_ERR,"Error in query: %s, ERROR: %s",q,mysql_error(&mysql));
goto ex_1;
};
res=mysql_store_result(&mysql);
if (mysql.affected_rows<1) {
mysql_free_result(res);
goto ex_1;
};
row=mysql_fetch_row(res);
sprintf(q,"SELECT BytesIn+BytesOut FROM log WHERE LogTime=%s AND UserLogId=%s",row[0],ulID);
mysql_free_result(res);
if (mysql_query(&mysql,q)) {
syslog(LOG_ERR,"Error in query: %s, ERROR: %s",q,mysql_error(&mysql));
goto ex_1;
};
res=mysql_store_result(&mysql);
if (mysql.affected_rows<1) {
mysql_free_result(res);
goto ex_1;
};
row=mysql_fetch_row(res);
sp=strtoul(row[0],NULL,10);
mysql_free_result(res);
sprintf(q,"SELECT ID, multiplaier FROM multi_burst WHERE user_ID=%s",uID);
if (mysql_query(&mysql,q)) {
syslog(LOG_ERR,"Error in query: %s, ERROR: %s",q,mysql_error(&mysql));
goto ex_1;
};
ins=0;
res=mysql_store_result(&mysql);
if (mysql.affected_rows<1) {
ins=1;
mult=3;
goto x1;
};
row=mysql_fetch_row(res);
mult=strtoul(row[1],NULL,10);
lm=mult;
x1:
mspeed=mspeed*48*1024;
mysql_free_result(res);
if (sp>mspeed) {
mult--;
if (mult<1) mult++;
} else {
mult++;
if (mult>3) mult--;
};
lm=nm*lm;
nm=nm*mult;
if (lm==nm) goto ex_1;
gen_user_change_spd(ip,mispeed,maspeed,mispd_bg,maspd_bg,mispd_inet,maspd_inet,mispd_out,maspd_out,mult,iface,oface,c_offset,bg_add,in_add);
if (ins) {
sprintf(q,"INSERT INTO multi_burst (ID,user_ID,multiplaier, br_ID) VALUES(NULL,%s,%lu,%s)",uID,mult,ID);
} else {
sprintf(q,"UPDATE multi_burst SET multiplaier=%lu WHERE user_ID=%s",mult,uID);
};
mysql_query(&mysql,q);
ex_1:
free(ulID);
ex_2:
free(q);
};
int main (int argc, char **argv)
{
int ret = 0;
int i,l,j,x,multi;
time_t ct;
struct tm *cur_t;
int c_offset;
MYSQL_RES *res;
MYSQL_ROW row;
MYSQL_RES *res1;
MYSQL_ROW row1;
char *q;
openlog ("multi-burst", LOG_PID, LOG_DAEMON | LOG_ERR);
if (argc < 1) {
syslog (LOG_ERR, "No bridge name in command line!");
goto exit_pr;
};
ct=time(NULL);
cur_t=localtime(&ct);
if (!mysql_real_connect (&mysql, argv[2], argv[3], argv[4],
argv[5], 3306, NULL, 0)) {
ret = 1;
syslog (LOG_ERR, "Can't open database. Error: %s\n",
mysql_error (&mysql));
goto exit_pr;
};
q = malloc (1024);
c_offset=atoi(argv[7]);
sprintf (q, "SELECT bg_load, inet_load FROM traf_load");
if (mysql_query (&mysql, q)) {
ret = 1;
syslog (LOG_ERR, "Query error: %s, ERROR: %s\n", q,
mysql_error (&mysql));
goto exit_x;
};
res = mysql_store_result(&mysql);
if (mysql.affected_rows < 1) {
ret = 1;
syslog (LOG_ERR, "No data in traf_load table: %s", argv[1]);
goto exit_x1;
};
row = mysql_fetch_row (res);
bg_add = strdup(row[0]);
in_add = strdup(row[1]);
mysql_free_result(res);
sprintf (q, "SELECT ID FROM bridges WHERE Name='%s'", argv[1]);
if (mysql_query (&mysql, q)) {
ret = 1;
syslog (LOG_ERR, "Query error: %s, ERROR: %s\n", q,
mysql_error (&mysql));
goto exit_x;
};
res = mysql_store_result (&mysql);
if (mysql.affected_rows < 1) {
ret = 1;
syslog (LOG_ERR, "No bridge with that name: %s", argv[1]);
goto exit_x1;
};
row = mysql_fetch_row (res);
ID=strdup (row[0]);
mysql_free_result (res);
sprintf (q, "SELECT ID, mispeed, maspeed, IP,mispd_bg,maspd_bg,mispd_inet,maspd_inet,mispd_out,maspd_out FROM users WHERE br_ID=%s AND Active='A'",ID);
if (mysql_query (&mysql, q)) {
ret = 1;
syslog (LOG_ERR, "Query error: %s, ERROR: %s\n", q,
mysql_error (&mysql));
goto exit_x;
};
res = mysql_store_result (&mysql);
if (mysql.affected_rows == 0) {
ret = 1;
syslog (LOG_ERR, "No users!");
};
l=mysql.affected_rows;
for (i = 0; i < l; i++) {
row = mysql_fetch_row (res);
calc_delta(row[0],row[1],row[2],row[4],row[5],row[6],row[7],row[8],row[9],row[3],argv[6],argv[8],c_offset);
};
exit_x1:
mysql_free_result (res);
exit_x:
free(bg_add);
free(in_add);
free(ID);
free (q);
mysql_close (&mysql);
exit_pr:
closelog ();
return ret;
}