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

📄 simutil.c

📁 仿真测试接口程序。根据电总《用户接入网管理功能与管理接口技术规范》之《与112集中受理系统接口规范》
💻 C
📖 第 1 页 / 共 2 页
字号:
#define SYBASE_ENV    1#include "simu112.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include <malloc.h>#ifdef SYBASE_ENV#include <sybfront.h>#include <sybdb.h>#include <syberror.h>#else#define DBNTWIN32#include "sqlfront.h"#include "sqldb.h"#endif#define		SwitchTableName		"Switch"/* #define    SwitchTableName   "SwitchSIM" */DEVICEHEAD *device_head;extern COMPRULEDATA comp_rule_data[MAX_SWITCH + 1];extern SOCKETSTRUCT so[MAX_FD];extern char LIC_USERNAME[61];extern int LIC_DRIVERNUMBER;static char *StringToupper(char *p);int f_is_ts_busy(char *ts_address, int ts_port);	/* 1 - busy   0 - idle */int getRouteDBrows(DBPROCESS * dbproc){/*  int routeDBrows=-1; */	short routeDBrows = -1;	RETCODE rc;	dbfcmd(dbproc, "select count(*) from %s a,%s b \		           where a.Switch=b.Switch and b.TestType='2'", "Exchange", SwitchTableName);	dbsqlexec(dbproc);	while ((rc = dbresults(dbproc)) != NO_MORE_RESULTS)	{		if (rc == SUCCEED)		{			while (dbnextrow(dbproc) != NO_MORE_ROWS)			{				routeDBrows = *(DBSMALLINT *) dbdata(dbproc, 1);			}		}	}/*  return routeDBrows; */	return (int) routeDBrows;}char switchType(char *switch_string){	COMPRULEDATA *p;	int i;	for (i = 0; i < MAX_SWITCH + 1; i++)	{		p = &comp_rule_data[i];		if (strlen(p->SwitchName) == 0)			break;		if (strcmp(switch_string, p->SwitchName) == 0)			return (char) i;	}	return (char) 0;}/************************************************************* *initialize the route table for deciding the terminal server* *return 0:success                                           * *      -1:failure                                           * *************************************************************/int setRouteTable(DBPROCESS * dbproc){	RETCODE rc;	int row, len, rtu_row;	char temp[21];	char old_Address[31];	char old_PortNumber[7];	if ((device_head = malloc(sizeof(DEVICEHEAD))) == NULL)	{		fLogInfo("malloc error!\n");		return -1;	}	if ((device_head->count = getRouteDBrows(dbproc)) == -1)	{		fLogInfo("Can not get route table rows\n");		free(device_head);		return -1;	}	if ((device_head->test_device = malloc(sizeof(TESTDEVICE) * device_head->count)) == NULL)	{		fLogInfo("malloc error!\n");		free(device_head);		return -2;	}	/*read data from Exchange and Switch,and assign them to test_device */	row = 0;	dbfcmd(dbproc, "select a.Exchange,b.Address,b.PortNumber,\				  b.TestPortType,b.SwitchPasswd,\				  b.ModemTelePhone,b.SIMSwitchType,\				  b.SIMSwitchIP,b.SIMSwitchPort,b.RtuId,b.UseGrade,b.SwitchUserName,b.MultConnect from %s a,%s b \				  where a.Switch=b.Switch and b.TestType='2' order by b.RtuId", "Exchange", SwitchTableName);	dbsqlexec(dbproc);	while ((rc = dbresults(dbproc)) != NO_MORE_RESULTS)	{		if (rc == SUCCEED)		{			old_Address[0] = '\0';			old_PortNumber[0] = '\0';			rtu_row = 0;			while (dbnextrow(dbproc) != NO_MORE_ROWS)			{				strncpy((device_head->test_device + row)->ExkNumber, (DBCHAR *) dbdata(dbproc, 1), (len = dbdatlen(dbproc, 1)));				(device_head->test_device + row)->ExkNumber[len] = 0;				RemoveWhitespace((device_head->test_device + row)->ExkNumber);				StringToupper((device_head->test_device + row)->ExkNumber);				strncpy((device_head->test_device + row)->TSAddress, (DBCHAR *) dbdata(dbproc, 2), (len = dbdatlen(dbproc, 2)));				(device_head->test_device + row)->TSAddress[len] = 0;				RemoveWhitespace((device_head->test_device + row)->TSAddress);				strncpy((device_head->test_device + row)->TSPortNo, (DBCHAR *) dbdata(dbproc, 3), (len = dbdatlen(dbproc, 3)));				(device_head->test_device + row)->TSPortNo[len] = 0;				RemoveWhitespace((device_head->test_device + row)->TSPortNo);				strncpy(temp, (DBCHAR *) dbdata(dbproc, 4), (len = dbdatlen(dbproc, 4)));				temp[len] = 0;				(device_head->test_device + row)->TestPortType = temp[0];				strncpy((device_head->test_device + row)->PortPassword, (DBCHAR *) dbdata(dbproc, 5), (len = dbdatlen(dbproc, 5)));				(device_head->test_device + row)->PortPassword[len] = 0;				RemoveWhitespace((device_head->test_device + row)->PortPassword);				strncpy((device_head->test_device + row)->DialNumber, (DBCHAR *) dbdata(dbproc, 6), (len = dbdatlen(dbproc, 6)));				(device_head->test_device + row)->DialNumber[len] = 0;				RemoveWhitespace((device_head->test_device + row)->DialNumber);				strncpy(temp, (DBCHAR *) dbdata(dbproc, 7), (len = dbdatlen(dbproc, 7)));				temp[len] = 0;				RemoveWhitespace(temp);				(device_head->test_device + row)->SwitchType = switchType(temp);				strncpy((device_head->test_device + row)->ServerAddress, (DBCHAR *) dbdata(dbproc, 8), (len = dbdatlen(dbproc, 8)));				(device_head->test_device + row)->ServerAddress[len] = 0;				RemoveWhitespace((device_head->test_device + row)->ServerAddress);				strncpy(temp, (DBCHAR *) dbdata(dbproc, 9), (len = dbdatlen(dbproc, 9)));				temp[len] = 0;				(device_head->test_device + row)->ServerPort = atoi(temp);				strncpy((device_head->test_device + row)->RtuId, (DBCHAR *) dbdata(dbproc, 10), (len = dbdatlen(dbproc, 10)));				(device_head->test_device + row)->RtuId[len] = 0;				RemoveWhitespace(StringToupper((device_head->test_device + row)->RtuId));				if (strcmp(old_Address, (device_head->test_device + row)->TSAddress) != 0						|| strcmp(old_PortNumber, (device_head->test_device + row)->TSPortNo) != 0)				{					rtu_row++;					strcpy(old_Address, (device_head->test_device + row)->TSAddress);					strcpy(old_PortNumber, (device_head->test_device + row)->TSPortNo);				}				strncpy(temp, (DBCHAR *) dbdata(dbproc, 11), (len = dbdatlen(dbproc, 11)));				temp[len] = 0;				(device_head->test_device + row)->UseGrade = temp[0];				strncpy((device_head->test_device + row)->SwitchUserName, (DBCHAR *) dbdata(dbproc, 12), (len = dbdatlen(dbproc, 12)));				(device_head->test_device + row)->SwitchUserName[len] = 0;				RemoveWhitespace((device_head->test_device + row)->SwitchUserName);				/* fLogInfo("device_head->SwitchUserName:%s\n", (device_head->test_device + row)->SwitchUserName); */				strncpy(temp, (DBCHAR *) dbdata(dbproc, 13), (len = dbdatlen(dbproc, 13)));				temp[len] = 0;				(device_head->test_device + row)->MultConnect = temp[0];				/* printf("MultConnect:%c\n",(device_head->test_device+row)->MultConnect); */				row++;			}		}	}	if (row == 0 || rtu_row > LIC_DRIVERNUMBER)		/* if RtuID Number>LIC_DRIVERNUMBER then return error */	{		free(device_head->test_device);		free(device_head);		if (rtu_row > LIC_DRIVERNUMBER)		{			fLogInfo("\n\nError encountered! Server abort!\n");			fLogInfo("The routers number is more than Maximum drivers number!\n");			fLogInfo("Please apply for new license!\n\n");			return -3;		}		else		{			fLogInfo("Routers number is 0!\n");			return -4;		}	}	device_head->count = row;	fLogInfo("device_head->count:%d, rtu_row:%d\n", device_head->count, rtu_row);	return 0;}int freeRouteTable(){	free(device_head->test_device);	free(device_head);	return 0;}/********************************************************* *comment:                                               * *       select which terminal server can be used to test* *return 0:success   1:can't be found  2:busy            * *********************************************************/int getSIMterm(TESTREQMSG * term_srv,							 char *sim_drv_addr,							 int *sim_drv_port){	int i;	int flag;											/* 0-judged by ExkNumber, 1-judged by address and port, 2-judged by RtuId */	char temp_rtuid[25];	char temp_addr[20];	char temp_port[7];	int found_flag;	flag = 0;	if (term_srv->Tid[0] != '\0')	{		if (strstr(term_srv->Tid, ","))		{			f_split_addr_port(term_srv->Tid, temp_addr, temp_port);			flag = 1;		}		else		{			strcpy(temp_rtuid, term_srv->Tid);			flag = 2;		}	}	/* printf("flag=%d, RtuId=%s\n",flag,temp_rtuid); */	switch (flag)	{	case 0:		found_flag = 0;		for (i = 0; i < device_head->count; i++)		{			if (strcmp(term_srv->ExkNumber, (device_head->test_device + i)->ExkNumber) == 0)			{													/* found */				found_flag = 1;				if ((device_head->test_device + i)->MultConnect != '1' && f_is_ts_busy((device_head->test_device + i)->TSAddress, atoi((device_head->test_device + i)->TSPortNo)))				{					printf("getSIMterm()::MultConnect=%c\n", (device_head->test_device + i)->MultConnect);					continue;							/* if TS is busy, then we finding next */				}				else				{					strcpy(sim_drv_addr, (device_head->test_device + i)->ServerAddress);					*sim_drv_port = (device_head->test_device + i)->ServerPort;					strcpy(term_srv->TSAddress, (device_head->test_device + i)->TSAddress);					strcpy(term_srv->TSPortNo, (device_head->test_device + i)->TSPortNo);					strcpy(term_srv->PortPassword, (device_head->test_device + i)->PortPassword);					strcpy(term_srv->SwitchUserName, (device_head->test_device + i)->SwitchUserName);					strcpy(term_srv->DialNumber, (device_head->test_device + i)->DialNumber);					term_srv->TestPortType = (device_head->test_device + i)->TestPortType;					term_srv->SwitchType = (device_head->test_device + i)->SwitchType;					term_srv->UseGrade = (device_head->test_device + i)->UseGrade;					return (0);						/*have been found */				}			}		}		if (found_flag)			return (2);		break;	case 1:		for (i = 0; i < device_head->count; i++)		{			if ((strcmp(temp_addr, (device_head->test_device + i)->TSAddress) == 0)			&& (strcmp(temp_port, (device_head->test_device + i)->TSPortNo) == 0))			{				/*success */				strcpy(sim_drv_addr, (device_head->test_device + i)->ServerAddress);				*sim_drv_port = (device_head->test_device + i)->ServerPort;				strcpy(term_srv->TSAddress, (device_head->test_device + i)->TSAddress);				strcpy(term_srv->TSPortNo, (device_head->test_device + i)->TSPortNo);				strcpy(term_srv->PortPassword, (device_head->test_device + i)->PortPassword);				strcpy(term_srv->SwitchUserName, (device_head->test_device + i)->SwitchUserName);				strcpy(term_srv->DialNumber, (device_head->test_device + i)->DialNumber);				term_srv->TestPortType = (device_head->test_device + i)->TestPortType;				term_srv->SwitchType = (device_head->test_device + i)->SwitchType;				term_srv->UseGrade = (device_head->test_device + i)->UseGrade;				return 0;								/*have been found */			}		}		break;	case 2:		for (i = 0; i < device_head->count; i++)		{			/* printf("..RtuId=%s\n",(device_head->test_device+i)->RtuId); */			if (strcmp(temp_rtuid, (device_head->test_device + i)->RtuId) == 0)			{				/*success */				strcpy(sim_drv_addr, (device_head->test_device + i)->ServerAddress);				*sim_drv_port = (device_head->test_device + i)->ServerPort;				strcpy(term_srv->TSAddress, (device_head->test_device + i)->TSAddress);				strcpy(term_srv->TSPortNo, (device_head->test_device + i)->TSPortNo);				strcpy(term_srv->PortPassword, (device_head->test_device + i)->PortPassword);				strcpy(term_srv->SwitchUserName, (device_head->test_device + i)->SwitchUserName);				strcpy(term_srv->DialNumber, (device_head->test_device + i)->DialNumber);				term_srv->TestPortType = (device_head->test_device + i)->TestPortType;				term_srv->SwitchType = (device_head->test_device + i)->SwitchType;				term_srv->UseGrade = (device_head->test_device + i)->UseGrade;				return 0;								/*have been found */			}		}		break;	}	return 1;											/*can't be found */}int f_is_ts_busy(char *ts_address, int ts_port)		/* 1 - busy   0 - idle */{	DRIVER_STATUS *drv_ptr;	int i;	for (i = 0; i < MAX_FD; i++)	{		if (so[i].whichType == IS_SIMDRV)		{			for (drv_ptr = so[i].driverStatus; drv_ptr != NULL; drv_ptr = drv_ptr->next)			{				if ((drv_ptr->ts_port == ts_port) && (strcmp(drv_ptr->ts_address, ts_address) == 0))				{					if (drv_ptr->status == DRV_BUSY)						return (1);					else						return (0);				}			}		}	}	return (0);}int getCompareDBrows(DBPROCESS * dbproc, char *switch_name){/*  int table_rows=-1; */	short table_rows = -1;	RETCODE rc;	dbfcmd(dbproc, "select count(*) from CompareTable where Switch='%s'", switch_name);	dbsqlexec(dbproc);	while ((rc = dbresults(dbproc)) != NO_MORE_RESULTS)	{		if (rc == SUCCEED)		{			while (dbnextrow(dbproc) != NO_MORE_ROWS)			{				table_rows = *(DBSMALLINT *) dbdata(dbproc, 1);			}		}	}/*  return table_rows; */	return (short) table_rows;}/****************************************** *initailize the comparable standard value* *return 0:success                        * *       -1:failure                       * ******************************************/int setCompareTable(DBPROCESS * dbproc){	int c_rows, i_rows, first, last, len;	static char olditem[7], item[7], temp[30];	char range[5];	float v_upper, v_lower;	static char sumcode[5];	static char switch_name[11];	COMPRULEDATA *p;	RETCODE rc;	int i, j;	int ret_val;/**************compare_table***************/	ret_val = -1;	p = comp_rule_data;	while (p->SwitchName[0] != '\0')	{		if ((c_rows = getCompareDBrows(dbproc, p->SwitchName)) == -1)			return -1;		if (c_rows == 0)		{			++p;			continue;		}		if ((p->compare_table = malloc(sizeof(COMPTABLE) * c_rows)) == NULL)			return -1;		/*read data from settable4 and set the comp_table and comp_index */		i_rows = c_rows = 0;		dbfcmd(dbproc, "select ITEM,RANGE,UPPER,LOWER,SUMCODE from CompareTable where Switch='%s' order by ITEM ", p->SwitchName);		dbsqlexec(dbproc);		strcpy(olditem, "0xyg");		while ((rc = dbresults(dbproc)) != NO_MORE_RESULTS)		{			if (rc == SUCCEED)			{				dbbind(dbproc, 1, STRINGBIND, 0, (BYTE *) item);				dbbind(dbproc, 2, STRINGBIND, 0, (BYTE *) range);				dbbind(dbproc, 3, REALBIND, 12, (BYTE *) & v_upper);

⌨️ 快捷键说明

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