[root@wlan-link progs_working_copy]# cat multi_burst.c #include #include #include #include #include #include #include #include #include #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; }