⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 .#loadaccount.pc.1.9

📁 linux 上http email 协议分析程序 主要能够处理大数据量的主干网的应用
💻 9
字号:
/************************************************************ *  FileName:       loadAccount.pc *  Author:         Jay *  Date:           2004.05.21 *  Version:        V01.00.00.00 *  Description:    1.读取要监控的Radius帐号和固定IP到共享内存中, *                  2.定时扫描共享内存,处理那些不正常下线的帐号 *                  3. * ************************************************************/#include <stdio.h>#include <iostream.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include "loadAccount.h"#include "RtRadiusIP.h"#include "Config.h"#include "Log.h"#include "Tools.h"EXEC SQL INCLUDE sqlca;EXEC ORACLE OPTION (RELEASE_CURSOR = YES);#define SQLCODE sqlca.sqlcode#define SQLNOTFOUND 1403void usage (const char* _str){    printf("usage:%s <config file>\n",_str);}bool oracle_error(const char* _str){     int intSqlCode = SQLCODE;     if (intSqlCode < 0)     {         cout <<_str<<SQLCODE << endl;         cout << sqlca.sqlerrm.sqlerrmc << endl;         writelog("%s,code:%ld,%s",_str,SQLCODE,sqlca.sqlerrm.sqlerrmc);         EXEC SQL ROLLBACK RELEASE;         exit(-1);     }     return false;}int connectDB(const char* cname,const char* cpass){    EXEC SQL BEGIN DECLARE SECTION;    char vc_name[32]="";    char vc_pass[32]="";    char vc_server[32]="";    EXEC SQL END DECLARE SECTION;    if(cname==NULL || strlen(cname)>=32)    {        printf("用户名:[%s]不符合规范!\n");        writelog("用户名:[%s]不符合规范!\n");        return -1;    }    if(cpass==NULL || strlen(cpass)>=32)    {        printf("密码:[%s]不符合规范!\n");        writelog("密码:[%s]不符合规范!\n");        return -1;    }    strcpy(vc_name,cname);    strcpy(vc_pass,cpass);    EXEC SQL CONNECT :vc_name IDENTIFIED BY :vc_pass ;    return 0;}int main (int argc,const char* argv[]){    if(argc!=2)    {        usage(argv[0]);        return -1;    }	EXEC SQL WHENEVER SQLERROR DO oracle_error("ORACLE ERROR: ");    EXEC SQL BEGIN DECLARE SECTION;    char sql_account[100]="";    char sql_ip[20]="";    int  sql_id=0;    EXEC SQL END DECLARE SECTION;    CConfig cfg;    if(cfg.ReadConfig(argv[1]) !=0)    {        printf("打开配置文件[%s]失败!\n",argv[1]);        exit(1);     };    char dbuser[255];    memset(dbuser,0x00,sizeof(dbuser));    if(cfg.GetItemValue("DB","name",dbuser)!=0)    {        printf("配置文件格式错误,读取数据库用户名失败! [DB]:name\n");        exit(1);    }    char dbpasswd[255];    memset(dbpasswd,0x00,sizeof(dbpasswd));    if(cfg.GetItemValue("DB","passwd",dbpasswd)!=0)    {        printf("配置文件格式错误,读取数据库密码失败! [DB]:passwd\n");        exit(1);    }    char tmp[255];    int key,size;    if (cfg.GetItemValue("IPWATCH","key",tmp)!=0)    {        printf("配置文件格式错误,读取共享内存key失败! [IPWATCH]:key\n");        exit(1);    }    key = atoi (tmp);    if ( key <= 0)    {        printf("配置文件格式错误,[IPWATCH]:key必须为大于0的整数!\n");        exit(1);    }    if (cfg.GetItemValue("IPWATCH","size",tmp)!=0)    {        printf("配置文件格式错误,读取共享内存SIZE失败! [IPWATCH]:size\n");        exit(1);    }    size = atoi (tmp);    if ( size <= 0)    {        printf("配置文件格式错误,[IPWATCH]:size必须为大于0的整数(单位Mb)!\n");        exit(1);    }    size = size*1024*1024;    if(openlog("../log/loadAccount.log")!=0)    {        exit(1);    }    CRtRdsIP myrt;    if (myrt.init(key,size)!=0)    {        writelog("初始化共享内存失败!");        printf("初始化共享内存失败!\n");        return -1;    }    myrt.reset();    writelog("初始化共享内存完成,连接数据库...");    if (connectDB(dbuser,dbpasswd)!=0)    {        printf("连接数据库失败!程序退出!\n");        writelog("connect database fail!process quit!\n");            exit(1);    }    writelog("连接数据库成功!");    //读取要监控的Radius帐号	EXEC SQL declare cur_account SCROLL cursor for		select AAC_ID,AAC_ACCOUNT from TR_T_AIMEDACCOUNT;	EXEC SQL declare cur_staticip SCROLL cursor for		select ASI_ID,ASI_IPADDRESS from TR_T_AIMEDSTATICIP;	EXEC SQL open cur_account;   while(true)   {       EXEC SQL FETCH cur_account into :sql_id,:sql_account;       if(SQLCODE == SQLNOTFOUND)           break;       CTools::rtrim(sql_account);       if (myrt.addAccount(sql_account)!=0)       {           writelog("读取帐号[%s]失败!",sql_account);           EXEC SQL CLOSE cur_account;           EXEC SQL ROLLBACK WORK RELEASE;           return -1;       } //begin debug       printf("add account:[%s]\n",sql_account);       //end debug   }   EXEC SQL CLOSE cur_account;	//增加要监控的静态IP   ulong uip;   struct in_addr inaddr;   EXEC SQL open cur_staticip;   while(true)   {       EXEC SQL FETCH cur_staticip into :sql_id,:sql_ip;       if(SQLCODE == SQLNOTFOUND)           break;	          printf("add ip:[%s][%u]\n",sql_ip,inaddr.s_addr);       CTools::rtrim(sql_ip);       if (inet_aton (sql_ip,&inaddr) == 0)       {           writelog("IP地址[%s] 转换失败!",sql_ip);           EXEC SQL CLOSE cur_staticip;           EXEC SQL ROLLBACK WORK RELEASE;           return -1;       }       if (myrt.addStaticIP(inaddr.s_addr)!=0)       {           writelog("增加监控IP[%s]失败!",sql_ip);           EXEC SQL CLOSE cur_staticip;           EXEC SQL ROLLBACK WORK RELEASE;           return -1;       }       printf("add ip:[%s][%u]\n",sql_ip,inaddr.s_addr);   }   EXEC SQL CLOSE cur_staticip;   EXEC SQL ROLLBACK WORK RELEASE;    //载入数据完毕,转入维护阶段    while(true)    {        sleep(5);    }    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -