
#include<stdio.h>
#include<netinet/in.h>
#include<string.h>
#include<pthread.h>

#include"sitar.h"
#include"sitar_com.h"
#include<almemsys/almemsys.h>
#include"jpreturn.h"



extern global_data_t gd;



// コマンド監視モード
int scan_comand(private_data_t *pd)
{
int ret = -1;

pd->sb.swap = safe_memcpy(pd->sb.swap, pd->sb.ch_com, BUF_MAX);
swap_char(pd->sb.swap);
pd->sb.ch_com = safe_sprintf(pd->sb.ch_com, BUF_MAX,"%s/%s 2>&1", gd.fi.command_path, pd->sb.swap);

#ifdef MYPEXEC_DEBUG
printf("MYPEXEC: scan_comand() %s\n", pd->sb.ch_com);
printf("MYPEXEC: scan_comand() sb.ch_plai = %s\n", pd->sb.ch_plai);
#endif

// TEST モード priority 4
if(0==self_memcmp(pd->sb.ch_plai, "4")){
   #ifdef MYPEXEC_DEBUG
   printf("MYPEXEC: scna_comand() \n");
   #endif
   pd->sb.ch_info = execom(pd->sb.ch_com, pd->sb.ch_info, pd->sb.timeout, 1);
   if(1 < strlen(pd->sb.ch_info)){
      #ifdef MYPEXEC_DEBUG
      printf("MYPEXEC: scan_comand() %s の標準出力、エラー出力（テストモード）\n", pd->sb.ch_info);
      #endif
      }
   if(1 >= strlen(pd->sb.ch_info)){
      #ifdef MYPEXEC_DEBUG
      printf("MYPEXEC: scan_comand() %s は正常終了（テストモード）\n", pd->sb.ch_com);
      #endif
      pd->sb.ch_info = safe_memcpy(pd->sb.ch_info, COM_3, BUF_MAX );
      }
   }

// ログ＆監視モード priority 11,12,13
else if(0==self_memcmp(pd->sb.ch_plai, "11")
     || 0==self_memcmp(pd->sb.ch_plai, "12") || 0==self_memcmp(pd->sb.ch_plai, "13")){
   #ifdef MYPEXEC_DEBUG
   printf("MYPEXEC: scna_comand() Priority 11,12,13\n");
   #endif
   pd->sb.ch_info = execom(pd->sb.ch_com, pd->sb.ch_info, pd->sb.timeout, 1);
   if(1 < strlen(pd->sb.ch_info)){
      #ifdef MYPEXEC_DEBUG
      printf("MYPEXEC: scan_comand() %s 標準出力、エラー出力（ログ監視モード）\n", pd->sb.ch_info);
      #endif
      if(0 == memcmp(pd->sb.ch_info, "NG:", 3)){
         if(0==self_memcmp(pd->sb.ch_plai, "11")){
            pd->sb.ch_plai = safe_memcpy(pd->sb.ch_plai, "1", BUF_MAX);
            }
         else if(0==self_memcmp(pd->sb.ch_plai, "12")){
            pd->sb.ch_plai = safe_memcpy(pd->sb.ch_plai, "2", BUF_MAX);
            }
         else if(0==self_memcmp(pd->sb.ch_plai, "13")){
            pd->sb.ch_plai = safe_memcpy(pd->sb.ch_plai, "3", BUF_MAX);
            }
         else{
            }
         #ifdef MYPEXEC_DEBUG
         printf("MYPEXEC: scan_comand() %s 出力にNG:を含むのでエラー priority 11,12,13 priority %d\n",
           pd->sb.ch_info, pd->sb.ch_plai);
         #endif
         }
      else{
         #ifdef MYPEXEC_DEBUG
         printf("MYPEXEC: scan_comand() %s 出力にNG:を含まない priority 11,12,13\n", pd->sb.ch_info);
         #endif
         }
      }
   if(1 >= strlen(pd->sb.ch_info)){
      #ifdef MYPEXEC_DEBUG
      printf("MYPEXEC: scan_comand() %s \n", pd->sb.ch_com);
      #endif
      pd->sb.ch_info = safe_memcpy(pd->sb.ch_info, COM_3, BUF_MAX );
      }
   }

// 通常コマンド監視モードpriority 1,2,3
else{
   #ifdef MYPEXEC_DEBUG
   printf("MYPEXEC: scan_comand() 通常のコマンド監視モードPriority 1,2,3\n");
   #endif
   pd->sb.ch_info = execom(pd->sb.ch_com, pd->sb.ch_info, pd->sb.timeout, 1);
   if(1 < strlen(pd->sb.ch_info)){
      #ifdef MYPEXEC_DEBUG
      printf("MYPEXEC: scan_comand() %s 標準出力、エラー出力\n", pd->sb.ch_info);
      #endif
      }
   if(1 >= strlen(pd->sb.ch_info)){
      #ifdef MYPEXEC_DEBUG
      printf("MYPEXEC: scan_comand() %s コマンド監視正常終了\n", pd->sb.ch_com);
      #endif
      }
   }

#ifdef MYPEXEC_DEBUG
printf("MYPEXEC: scan_comand(): コマンド出力 ---> %s -->カウント %d\n", pd->sb.ch_info, (int)strlen(pd->sb.ch_info));
#endif

swap_mem(pd->sb.ch_info, '\n', ' ');
swap_mem(pd->sb.ch_info, '\r', ' ');
swap_mem(pd->sb.ch_info, ',', ' ');

if(1 > (int)strlen(pd->sb.ch_info)){
   pd->sb.check_stat = 0;
   ret = 0;
   #ifdef MYPEXEC_DEBUG
   printf("MYPEXEC: scan_comand(): 正常終了\n");
   #endif
   }
else{
   pd->sb.check_stat = 1;
   ret = -1;
   #ifdef MYPEXEC_DEBUG
   printf("MYPEXEC: scan_comand(): エラー出力\n");
   #endif
   }

return ret;
}




