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

📄 test.c

📁 电信数字交换机用户数据联机下载入磁带程序
💻 C
📖 第 1 页 / 共 5 页
字号:
              Sw->V5 = 0;
          break;
          }
   if (ExkPtr == ExkNum) {
      ReturnCode = 9;       // Manual exec
      ReturnResult(ReqSrc, TID, ReturnCode, "");
      return;
      }
   }

/* 7. 移机 */
if (Func == 7) {
   GetPara(Para, "LL=", tmp, 30);
   if (strlen(tmp) == 0) {
       ReturnCode = 8;
       Sw->Busy = 0;
       ReturnResult(ReqSrc, TID, ReturnCode, "");
       return;
       }
   GetPara(Para, "NEWTEL=", NewTel, TEL_LEN);
   for (ExkPtr=0; ExkPtr<ExkNum; ExkPtr++)
       if (strncmp(NewTel, Exk[ExkPtr].Exk, strlen(Exk[ExkPtr].Exk)) == 0) {
          NewSw = Exk[ExkPtr].SwPtr;
          Sw->NewSw = NewSw;
          if (Sw != NewSw) {    // Not same switch
              if (NewSw->Busy == 1) {   // New switch busy
                  if (NewSw->Step[NewSw->SP] >= 3000000 && NewSw->Step[NewSw->SP] < 3000020 ||
                      NewSw->Step[NewSw->SP] >= 9000000 && NewSw->Step[NewSw->SP] < 9000010)
                      ReturnCode = 4;   // NECG30 or 5ESS login
                  else
                      ReturnCode = 5;   // Switch busy
                  Sw->Busy = 0;
                  ReturnResult(ReqSrc, TID, ReturnCode, "");
                  return;
                  }
              if (CAPINodeStatus(NewSw->TcpNodeName) != TCP_CONNECTED) {
                  ReturnCode = 4;
                  Sw->Busy = 0;
                  ReturnResult(ReqSrc, TID, ReturnCode, "");
                  return;
                  }
              strcpy(NewSw->ReqSrc, ReqSrc);
              strcpy(NewSw->TID, TID);
              strcpy(NewSw->Tel, NewTel);
              strcpy(NewSw->Para, Para);
              strcpy(NewSw->NewSrv, Sw->NewSrv);
              NewSw->Func = Func;
              NewSw->Busy = 1;
              NewSw->SP = 0;
              NewSw->Step[0] = 0;
              NewSw->NewSw = NULL;
              // V5
              if (strstr(Exk[ExkPtr].SwitchTypeStr, "V5"))
                  Sw->V5 = 1;
              else
                  Sw->V5 = 0;
              }
          break;
          }
   if (ExkPtr == ExkNum) {
      Sw->Busy = 0;
      ReturnCode = 9;       // Manual exec
      ReturnResult(ReqSrc, TID, ReturnCode, "");
      return;
      }
   }

/* 实装统计 */
if (Func == 200) {
    GetPara(Para, "EXK=", Tel, 8);
    for (ExkPtr=0; ExkPtr<ExkNum; ExkPtr++) {
        if (strcmp(Exk[ExkPtr].Exk, Tel) == 0) {
            Sw = Exk[ExkPtr].SwPtr;
            if (Sw->Busy == 1) {
                if (Sw->Step[Sw->SP] >= 3000000 && Sw->Step[Sw->SP] < 3000020 ||
                    Sw->Step[Sw->SP] >= 9000000 && Sw->Step[Sw->SP] < 9000010)
                    ReturnCode = 4;   // NECG30 or 5ESS login
                else
                    ReturnCode = 5;   // Switch busy
                ReturnResult(ReqSrc, TID, ReturnCode, "");
                return;
                }
            strcpy(Sw->ReqSrc, ReqSrc);
            strcpy(Sw->TID, TID);
            strcpy(Sw->Tel, "");
            strcpy(Sw->Para, "");
            Sw->InstLine = 0;
            Sw->ExkPtr = 0;
            Sw->Func = Func;
            Sw->Busy = 1;
            Sw->SP = 0;
            Sw->Step[0] = Sw->SwitchType * 1000000 + Func * 1000;
            break;
            }
        }
    if (ExkPtr == ExkNum) {
        ReturnCode = 9;       // Manual exec
        ReturnResult(ReqSrc, TID, ReturnCode, "");
        return;
        }
    }

}





/*==========================================================
Function: Send2Switch
Note    : Send command to switch
Para    : None
Return  : 1 - if succeed
          0 - if failed
============================================================*/
int Send2Switch(void)
{
int  sent;

sprintf(LogBuff, "Send2 %s: %s\n", Sw->Office, SndBuff);
LogInfo(LogBuff);

if (CAPINodeStatus(Sw->TcpNodeName) == TCP_CONNECTED) {
    if (SendTcpPacket(SndBuff, Sw->TcpNodeName) == -1)
        sent = 0;
    else
        sent = 1;
    }
else
    sent = 0;

if (sent == 0) {
   sprintf(LogBuff, "Can not send to %s,%s : %s", Sw->Addr, Sw->Port, SndBuff);
   LogErr(LogBuff);
   return 0;
   }
else
   return 1;
}




/*==========================================================
Function: ReturnResult
Note    :
Para    : char *ReqSrc
          char *TID
          int  ReturnCode
          char *Para
Return  : None
============================================================*/
void ReturnResult(char *ReqSrc, char *TID, int ReturnCode, char *Para)
{
sprintf(SndBuff, "%s %04d %s", TID, ReturnCode, Para);
sprintf(LogBuff, "Rtn : %s\n", SndBuff);
LogInfo(LogBuff);
if (SendTcpPacket(SndBuff, ReqSrc) == -1) {
    sprintf(LogBuff, "Can not return to %s : %s", ReqSrc, SndBuff);
    LogErr(LogBuff);
    }
}





/*==========================================================
Function: LogErr
Note    : Log error, "\n" has been added
Para    : char *msg - Log message string
Return  :
============================================================*/
void LogErr(char *msg)
{
FILE   *fp;
struct tm date_time;
time_t time_c;                  /* typedef long time_t; */

time(&time_c);
memcpy(&date_time, localtime(&time_c), sizeof(date_time));

if ((fp=fopen(ErrLogFileName,"a"))==NULL) {
   //perror("Error: Can not open error log file: ");
   //printf("%s\n",ErrLogFileName);
   return;
   }
if (ftell(fp) >= 5L*1024L*1024L) {   /* max log file size is 5M */
   close(fp);
   unlink(ErrLogFileName);
   if ((fp=fopen(ErrLogFileName,"a"))==NULL) {
      //perror("Error: Can not open error log file: ");
      //printf("%s\n",ErrLogFileName);
      return;
      }
   }

fprintf(fp, "%d-%02d-%02d %02d:%02d:%02d  %s\n",
    date_time.tm_year+1900, date_time.tm_mon+1, date_time.tm_mday,
    date_time.tm_hour, date_time.tm_min, date_time.tm_sec, msg);

fclose(fp);
}





/*==========================================================
Function: LogWarn
Note    : None
Para    : None
Return  :
============================================================*/
void LogWarn(void)
{
FILE   *fp;
struct tm date_time;
time_t time_c;                  /* typedef long time_t; */

time(&time_c);
memcpy(&date_time, localtime(&time_c), sizeof(date_time));

if ((fp=fopen(WarnLogFileName,"a"))==NULL) {
   //perror("Error: Can not open error log file: ");
   //printf("%s\n",ErrLogFileName);
   return;
   }
if (ftell(fp) >= 5L*1024L*1024L) {   /* max log file size is 5M */
   close(fp);
   unlink(WarnLogFileName);
   if ((fp=fopen(WarnLogFileName,"a"))==NULL) {
      //perror("Error: Can not open error log file: ");
      //printf("%s\n",ErrLogFileName);
      return;
      }
   }

if (Sw->Connect == 1)
    strcpy(LogBuff, "接通");
else
    strcpy(LogBuff, "*** 断开 ***");

fprintf(fp, "%d-%02d-%02d %02d:%02d:%02d  %s %s\n",
    date_time.tm_year+1900, date_time.tm_mon+1, date_time.tm_mday,
    date_time.tm_hour, date_time.tm_min, date_time.tm_sec, Sw->Office, LogBuff);

fclose(fp);
}





/*======================================================
Function: LogInfo
Note    : "\n" not added
Para    : char *msg
Return  : None
======================================================*/
void LogInfo(char *msg)
{
FILE   *fp;

if (LOG != 1) return;

if ((fp=fopen(InfoLogFileName,"a"))==NULL) return;

if (ftell(fp)>=10L*1024L*1024L) {   /* max log file size is 10M */
   close(fp);
   unlink(InfoLogFileName);
   if ((fp=fopen(InfoLogFileName,"a"))==NULL) return;
   }

fprintf(fp, "%s", msg);             /* Output to file   */
fclose(fp);
}





/*======================================================
Function: Quit
Note    : deal with quit signal, exit program normally
Para    : None
Return  : int
======================================================*/
int Quit(void)
{
sprintf(LogBuff, "Program terminated. \n");
LogErr(LogBuff);
QUIT = 1;
}




/*========================================================
Function: strupr
Note    : Convert string to upper case
Para    : char *str - String
Return  : String
=========================================================*/
char *strupr(char *str)
{
char *p;

for (p=str;*p!=0;p++)  *p=toupper(*p);
return str;
}




/*=========================================================
Function: GetPara
Note    : Get parameter from a string.
Para    : char *src  - The source string to be scanned
          char *name - Parameter name (ex: "TEL=")
          char *buff - The result buffer
          int  maxlen- if read chars more than maxlen, return ""
Return  : if success, return 1
          otherwise,  return 0 & Null string
==========================================================*/
int GetPara(char *src, char *name, char *buff, int maxlen)
{
char *p, *dst;
int  read_chars = 0;

p = strstr(src, name);
if (!p) {                           /* Not found */
   buff[0] = '\0';                  /* Return Null string */
   return 0;
   }
p += strlen(name);                  /* skip the name string */

while (*p == ' ') p++;              /* skip the leading spaces */

for (dst=buff; *p!=' ' && *p!=';' && *p!=',' && *p!=0 && *p!=0x0d && *p!= 0x0a; p++,dst++) {
    *dst = *p;
    read_chars ++;
    if (read_chars>maxlen) {
       buff[0] = '\0';
       return 0;
       }
    }

*dst = '\0';                        /* End the buff */

return 1;
}





/*=================================================================
Function: timer
Note    : Increase the timer variable by 1 in Exk array every 1 sec
Para    : None
Return  : None
==================================================================*/
void timer(void)
{
time_t  cur_time, time_pass;

time(&cur_time);
time_pass = cur_time - systime;

if (time_pass==0) return;

systime = cur_time;
for (SwPtr=0; SwPtr<SwitchNum; SwPtr++)
    Switch[SwPtr].timer += time_pass;
}





/*================================================================
Function: Go(int step)
Note    :
Para    : int step
Return  : None
================================================================*/
void Go(int step)
{
Sw->Step[Sw->SP] = step;
Sw->timer = 0;
}





/*================================================================
Function: GoSub(int step)
Note    :
Para    : int step
Return  : None
================================================================*/
void GoSub(int step)
{
Sw->Step[Sw->SP] ++;
Sw->SP ++;
Sw->Step[Sw->SP] = step;
}




/*================================================================
Function: Rtn
Note    : Return from sub
Para    : None
Return  : None
================================================================*/
void Rtn(void)
{
Sw->SP --;
}





/*================================================================
Function: Send2Warn
Note    : None
Para    : None
Return  : None
================================================================*/
void Send2Warn(void)
{
struct tm date_time;
time_t time_c;                  /* typedef long time_t; */
char   date_str[32], msg[128];

time(&time_c);
memcpy(&date_time, localtime(&time_c), sizeof(date_time));

sprintf(date_str, "%d-%02d-%02d %02d:%02d:%02d",
    date_time.tm_year+1900, date_time.tm_mon+1, date_time.tm_mday,
    date_time.tm_hour, date_time.tm_min, date_time.tm_sec);

if (Sw->Connect == 1)
    strcpy(msg, "接通");
else
    strcpy(msg, "*** 断开 ***");

sprintf(SndBuff, "%s %s %s\r\n", date_str, Sw->Office, msg);

if (CAPINodeStatus(WarnHost) == TCP_CONNECTED)
    SendTcpPacket(SndBuff, WarnHost);
}






/*==============================================================
Function: GetPacketNEC
Note    : Judge NEC end-of-packet & get the error code
Para    : None
Return  : 1 - if reach packet end
          0 - if not reach packet end
==============================================================*/
int GetPacketNEC(void)
{
char  *p;

if (strstr(Sw->RcvBuff, "END\x0d") && strstr(Sw->RcvBuff, Sw->Tel)) {
    Sw->ReturnCode = 0;
    return 1;
    }
if ( (p=strstr(Sw->RcvBuff, "ERR-")) && strlen(p) >= 8 ) {
    p += 4;         // Point to '0' of "ERR-011"
    p[3] = '\0';    // set '\x0d' to 0
    sscanf(p, "%d", &Sw->ReturnCode);
    return 1;
    }
return 0;
}




/*==============================================================
Function: GetNewSrvNEC
Note    : Get and combine newsrv string
Para    : None
Return  : 1 - if success
          0 - if fail, normal reason is error tel num
==============================================================*/
int GetNewSrvNEC(void)
{
char  *p, buf[64];
int   i;

p = strstr(Sw->RcvBuff, "EL=");
if (!p) return 0;     // for judge err tel no in both version of nec
/* p="EL=00210001        101010  000  E                 " */
p += 32;    // Point to 'E'

if (strcmp(Sw->SwitchTypeStr, "NECBF62") == 0) {
    p = strstr(Sw->RcvBuff, " SC(");
    if (!p) return 1;   // No NewSrv
    p += strlen(" SC(x) = ");
    }

for (i=0; *p != ' '; i++,p++) buf[i] = *p;
buf[i] = '\0';

if (Sw->NewSrv[SPEED_CALL] == '-' && strchr(buf, 'B'))
    Sw->NewSrv[SPEED_CALL] = '1';
if (Sw->NewSrv[HOT_LINE_A] == '-' && strchr(buf, 'C'))
    Sw->NewSrv[HOT_LINE_A] = '1';
if (Sw->NewSrv[CALL_STORE_BUSY] == '-' && strchr(buf, 'D'))
    Sw->NewSrv[CALL_STORE_BUSY] = '1';
if (Sw->NewSrv[CALL_RESTRICT] == '-' && strchr(buf, 'E'))
    Sw->NewSrv[CALL_RESTRICT] = '1';
if (Sw->NewSrv[WAKE_UP] == '-' && strchr(buf, 'F'))
    Sw->NewSrv[WAKE_UP] = '1';

⌨️ 快捷键说明

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