📄 simutil.c
字号:
#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 + -