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

📄 dbsmgw.h

📁 电信的97接口程序,用于把话单入库。这里是采用FTP方式采集话单
💻 H
字号:
/*+============================================================================
File:        raddbs.h
Summary:     The file defined the interface with database.
History:
2000/05/26	V1.0 
	Start it. (shencan@263.net)

2001/12/25
	Add new class for interface97 
	Add the method of shared directory by zoohoo@163.com

2001/12/28
	Add the license control for interface97 by zoohoo@163.com

2002/01/10 
	Add the database interface by zoohoO@163.com
	Fix the bug of Delete UserAcct Records judgement 
============================================================================+*/

#ifndef   _RAD_DBS_H
#define   _RAD_DBS_H

#include "time.h"
#include <ptlib.h>
#include <set.h>
#include <hash_set.h>
#include "global.h"

#define DB_TIMEOUT		5	 // database request timeout value!
#define ACE_WIN32
#define FREQUENCY_TIME	50	 // the number of users added, the time for system to get really usernumber


const int maxAuthContinueFail = 3;
const int maxAcctContinueFail = 3;


// String length const
#define ADSI_USER_LEN 24
#define ADSI_PASSWD_LEN 20
#define ADSI_PHONE_LEN 20
#define ADSI_TERMINAL_ID_LEN 20
#define ADSI_PLATFORM_ID_LEN 2
#define ADSI_ACLICP_LEN 32
#define ADSI_ACLCONTENT_LEN 32
#define ADSI_REPLY_LEN 24
#define ADSI_SESSION_LEN 30
#define ADSI_THIRDCALL_LEN 15
#define ADSI_BILL_TYPE_LEN 1
#define ADSI_SEND_STATUS_LEN 1
#define ADSI_PRI_LEN 1
#define ADSI_SMC_ID_LEN 2
#define ADSI_GW_ID_LEN 2
#define ADSI_PRE_GW_ID_LEN 2
#define ADSI_CONTENT_ID_LEN 64

//Below list the maxium length of typical string variables.
#define RAD_PHONENO_LEN     40      /* Dialing number */
#define RAD_ACCESSNUM_LEN   16      /* Access  number */
#define RAD_REGIONID_LEN    16      /* Reigion identity */	// old is 4
#define RAD_SECRET_LEN      64      /* Shared secret  */
#define RAD_AUTHCATOR_LEN   16      /* Authenticator  */
#define RAD_PSWDSEG_LEN     16      /* Password segment */
#define RAD_EVEN_PSWDSEG_LEN	32      /* even Password segment length */
#define RAD_PASSWORD_LEN    128     /* Password       */
#define RAD_ATTRSTR_LEN     253     /* Attribute (string) */
#define RAD_USERSTR_LEN     64      /* User name      */
#define RAD_ATTRNAME_LEN    32      /* Attribute name */
#define RAD_VALNAME_LEN     64      /* Value  name    */
#define RAD_MAXLINE         256     /* Line of text file */
#define RAD_FILENAME_LEN    32      /* File  name     */
#define RAD_DIRNAME_LEN    128      /* File  name     */
#define RAD_HOSTID_LEN      32      /* Host identity  */
#define RAD_LOGMSG_LEN      256     /* Logged message */
#define RAD_HEADER_LEN      20      /* Radius packet header */
#define RAD_SESSIONID_LEN   48      /* Session Identity */
#define RAD_PACKET_LEN      (4096 + RAD_SECRET_LEN)   /* Default buffer */

#define MAX_GROUP_NUM       10
#define GROUPID_LEN         6

#define   ONEBIT 1

#define   SETFLAG(x,y)		((x)->m_bitFlag |= (y))
#define   UNSETFLAG(x,y)	((x)->m_bitFlag &= ~(y))
#define   ISSETFLAG(x,y)	((x)->m_bitFlag & (y))
#define   CLEARFLAG(x)		((x)->m_bitFlag = 0)

#define   SETVPNFLAG(x,y)		((x)->m_vpnFlag |= (y))
#define   UNSETVPNFLAG(x,y)		((x)->m_vpnFlag &= ~(y))
#define   ISSETVPNFLAG(x,y)		((x)->m_vpnFlag & (y))
#define   CLEARVPNFLAG(x)		((x)->m_vpnFlag = 0)



class AcctInfo {
public:
	// In parameters:
	unsigned int	crv;
	char			username[ RAD_USERSTR_LEN +1];
	char			called  [ RAD_PHONENO_LEN +1];
	char			calling [ RAD_PHONENO_LEN +1];
	int				acctStatus;
	char			sessionId [ RAD_SESSIONID_LEN +1];
	char			regionId  [ RAD_REGIONID_LEN +1 ];
	unsigned int	callType;
	char			accessNumber [ RAD_ACCESSNUM_LEN +1 ];
	int				localFee;
	unsigned int	localRadius;
	unsigned int	orginGkAddr;  
	unsigned int	orginGwAddr;   
	unsigned int	destGkAddr;  
	unsigned int	destGwAddr;
	time_t			startTime;
	int				sessionTime;
	unsigned int	inBytes;
	unsigned int	outBytes;
	unsigned int	stopCause;
	unsigned int	codecType;

	unsigned int	serviceType;		// expanded by ZTE

	unsigned int	authLevel;       // radius or else
	unsigned int	framedProtocol;  //  must 1
	unsigned int	framedAddress;
	unsigned int	nasAddr;
	unsigned int	portNo;
	unsigned int	portType;
	unsigned int	inputPacket;
	unsigned int	outputPacket;
	unsigned int	linkCount;

	enum UserType	userType;	// Is it a Calling user or a Card user,
								// This variable isnot set in m_bitFlag.
	char			type;		// get it from NasCall()
	char			group[4];
	long			currentTime;

	char			multiSessionId[RAD_SESSIONID_LEN+1];
	char			nasId[RAD_USERSTR_LEN +1];
	
	unsigned int	acctDelayTime;
	time_t			eventTimestamp;

	// ADSI begin ----
	// 仅对信息计帐有效:
	char			terminalID[ADSI_TERMINAL_ID_LEN+1];
	unsigned int	conSerType;
	unsigned int	contentType;
	char			platformID[ADSI_PLATFORM_ID_LEN+1];
	unsigned int	icpID;
	char			thirdCallID[ADSI_THIRDCALL_LEN+1];
	char			billType[ADSI_BILL_TYPE_LEN+1];
	unsigned int	contentFee;
	unsigned int	fixedFee;
	unsigned int	contentOctets;
	char			sendStatus[ADSI_SEND_STATUS_LEN+1];
	char			pri[ADSI_PRI_LEN+1];
	char			smcID[ADSI_SMC_ID_LEN+1];
	char			gwID[ADSI_GW_ID_LEN+1];
	char			preGwID[ADSI_PRE_GW_ID_LEN+1];
	unsigned int	sendType;
	char			contentID[ADSI_CONTENT_ID_LEN+1];

	enum  AttrNum {
		// Common
		e_radClass		= ONEBIT,
		e_sessionTime	= ONEBIT << 1,
		e_inBytes		= ONEBIT << 2,
		e_outBytes		= ONEBIT << 3,
		e_stopCause		= ONEBIT << 4,
		e_serviceType	= ONEBIT << 5,
		e_authLevel		= ONEBIT << 6,
		e_framedProtocol= ONEBIT << 7,
		e_framedAddress	= ONEBIT << 8,
		e_nasAddr		= ONEBIT << 9,
		e_portNo		= ONEBIT << 10,
		e_portType		= ONEBIT << 11,
		e_inputPacket	= ONEBIT << 12,
		e_outputPacket	= ONEBIT << 13,
		e_linkCount		= ONEBIT << 14,

		e_acctStatus	= ONEBIT << 15,		//e_acctStatusType= ONEBIT << 15,
		e_acctDelayTime	= ONEBIT << 16,
		e_inputGigaOctets	= ONEBIT << 17,
		e_outputGigaOctets	= ONEBIT << 18,

		// 仅对信息计帐有效:
		e_conSerType	= ONEBIT << 20,
		e_contentType	= ONEBIT << 21,
		e_icpID			= ONEBIT << 22,
		e_contentFee	= ONEBIT << 23,
		e_fixedFee		= ONEBIT << 24,
		e_contentOctets	= ONEBIT << 25,
		e_sendType		= ONEBIT << 26,

		e_eventTimestamp= ONEBIT << 26,
	};
	unsigned int  m_bitFlag;
	unsigned int  m_vpnFlag;

	AcctInfo() { m_bitFlag = 0; m_vpnFlag = 0;	}
};

/////////////////////////////////////////////////////////////////////
// Those Database access functions
/////////////////////////////////////////////////////////////////////

#ifdef MSSQL

#define DBNTWIN32
#include "windows.h"
#include <sqlfront.h>
#include <sqldb.h>
#define	ITOA(type, buffer, len)		itoa(type, buffer, len)

#else

#define	ITOA(type, buffer, len)		itoa(type, buffer, len)
#include <sybfront.h>
#include <sybdb.h>
#include <syberror.h>

#define PDBPROCESS DBPROCESS *
#endif /* MSSQL */

// return -1 means error, other means success
int DbLogin();
int DbLogoff();
int DbRelogin();

//int DbRecord(AcctInfo * pAcctInfo, int * remainMoney, int isRecordOnly=0);
//int DbSmgwRecord(PString rec);
int SaveDB(UserInterface *);

//////////////////////////////////////////////////////////////////////////
// Common database API

PDBPROCESS DbConnect();
int DbConnectOff(PDBPROCESS dbproc);
int DbReconnect(PDBPROCESS dbproc);
int DbReconnect(int n);
int GetConnectSub(PDBPROCESS dbproc);
int DbFreeResource();
int ConnectAlterDatabase();


#ifdef MSSQL
int DbErrorHandler(PDBPROCESS dbproc, int severity, int dberr,
				   int oserr, const char * dberrstr, const char * oserrstr);

int DbMsgHandler(PDBPROCESS dbproc, DBINT msgno, int msgstate,
				 int severity, const char * msgtext, const char * server,
				 const char * procedure, DBUSMALLINT line);
int DbErrorNULLHandler(PDBPROCESS dbproc, int severity, int dberr,
			int oserr, const char * dberrstr, const char * oserrstr);
#else
int __stdcall DbErrorHandler(PDBPROCESS dbproc, int severity, int dberr,
				   int oserr, char * dberrstr, char * oserrstr);

int __stdcall DbMsgHandler(PDBPROCESS dbproc, DBINT msgno, int msgstate,
				 int severity, char * msgtext, char * server,
				 char * procedure, int line);
int __stdcall DbErrorNULLHandler(PDBPROCESS dbproc, int severity, int dberr,
				   int oserr, char * dberrstr, char * oserrstr);
#endif /* MSSQL */

int GetConnect();
int FreeConnect(int i);
DBPROCESS * GetConnectPointer();
int FreeConnect(DBPROCESS * connect);



class DbConnectGuard
{
public:
	DbConnectGuard(int con)
	{
		m_con = con;
	};
	~DbConnectGuard()
	{
		if ( FreeConnect(m_con) == -1 )
			PTRACE(3, "Warn, free db connect fail");
	}
private:
	int m_con;
};


class DbPConnectGuard
{
public:
	DbPConnectGuard(DBPROCESS * con)
	{
		m_con = con;
	};
	~DbPConnectGuard()
	{
		if ( FreeConnect(m_con) == -1 )
			PTRACE(3, "Warn, free db connect fail");
	}
private:
	DBPROCESS * m_con;
};


class CInterfaceContent
{
private:
	int m_inheritGroup;
	int m_userStatus;
	int m_retRow;
	int m_connection;
	char m_sql[SQL_SIZE];
	char m_sql2[SQL_SIZE];
	int m_license; // the number of license
	int m_userNum; // the user's number now
	int m_state; // the operation at once. 0:insert 1:delete 2:update

	int JudgeTimeType(char * datetime, int size);

	void SetInterfaceValue(int num, char * buffer);
	void GetInsertSQL(int isLink = 0);
	void GetInsertSQL(char * areaNo, char * telNumber, int isLink = 0);
	void GetDeleteSQL();
	void GetDeleteSQL(char *);
	void GetUpdateSQL();
	int OperateDb();

	int OperateDb_SH(); //add by zjl for ShangHai 97
	int GetInfoFromSheetDetail();

	int GetInheritType(char * userAccounts);
	int GetAdsiAttr(char *userAccounts);
	int GetUserStatusFromTable(char* userAccounts);
	void SetUserStatus(int userStatus);
	void SetUserStatus(int userStatus, char * areaNo, char * telNumber);
	void LinkInsert(char * account, char * linkAccount);
	void LinkDelete(char * account);
	void LinkedDelete(char * account);
	int DeleteRecord(char * userAccounts);
	int ExecSQL(char * sql, char * sql2);
	int GetUserGroup(char * userGroup);
	int GetDateDiff(char * userAccounts);
	void LinkChange(char * oldTel, char * newTel);

	void TransferEndTime(char * endTime, char * buf);

    int AddGroupList(char * newTel );
    int RemoveGroupList(char * newTel );
    int IsGrpInGrpList(char * preGroupList, const char * groupNo );
    int RemoveGrpFromGrpList(char * preGroupList, const char * groupNo, char * groupList );
    int CheckGrpList(char * pGroupList );

public:
	CInterfaceContent(int connection);
	~CInterfaceContent();
	
	DBPROCESS * m_dbproc;

	char m_serviceId[18];
	char m_userGroup[4];
	char m_areaNo[6];
	char m_teleNumber[13];
	char m_oldTeleNum[13];
	int  m_operateType;
	char m_genTime[20];
	char m_endTime[20];
	char m_sendTime[20];
	char m_backTime[20];
	char m_userType[2];
	char m_password[17];
	int  m_flag;
	int  m_remainTime;
	char m_aCLICP[33];
	char m_aCLContent[33];
	int  m_sendRecv;
	char m_addString[256];

	char m_oldUserType[2];

	int	 m_isBackSheet; //add by zjl for ShangHai 97

    int  m_userSource;
    char m_groupList[71];
    char m_preGroupList[71];
    int  m_protocolType;

    char m_groupArray[MAX_GROUP_NUM][GROUPID_LEN + 1];
	
	int GetValue(UserInterface* userInterface);
	int GetLicenseInfo();
};

#endif   /* _RAD_DBS_H */

⌨️ 快捷键说明

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