All pastes #757800 Raw Edit

Mine

public text v1 · immutable
·published 2007-11-01 16:59 UTC
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;
}