Subversion Repositories wimsdev

Rev

Rev 8185 | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. /*    Copyright (C) 1998-2003 XIAO, Gang of Universite de Nice - Sophia Antipolis
  2.  *
  3.  *  This program is free software; you can redistribute it and/or modify
  4.  *  it under the terms of the GNU General Public License as published by
  5.  *  the Free Software Foundation; either version 2 of the License, or
  6.  *  (at your option) any later version.
  7.  *
  8.  *  This program is distributed in the hope that it will be useful,
  9.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11.  *  GNU General Public License for more details.
  12.  *
  13.  *  You should have received a copy of the GNU General Public License
  14.  *  along with this program; if not, write to the Free Software
  15.  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  16.  */
  17. #include "wimslogd.h"
  18.  
  19. /* daemon command processing */
  20.  
  21. /* testing routine. Don't touch! */
  22. void cmd_test(char *p)
  23. {
  24. }
  25.  
  26. void cmd_ping(char *p)
  27. {
  28.   char *p1;
  29.   int qtest;
  30.   p1=find_word_start(p); *find_word_end(p1)=0;
  31.   if(*p1!=0 && qbuf[0]!=0 && wordchr(qbuf,p1)!=NULL) qtest=1; else qtest=0;
  32.   snprintf(textbuf+3,MAX_LINELEN,"%d %s\n%s",qtest,loadavg,ipbuf);
  33. }
  34.  
  35. void cmd_forklist(char *p)
  36. {
  37.   snprintf(textbuf+3,MAX_LINELEN,"%d",forkcnt);
  38. }
  39.  
  40. void cmd_readfile(char *p)
  41. {
  42.   char *cut[2];
  43.   int l;
  44.   cutwords(p,cut,2);
  45.   if(cut[1][0]) l=evalue(cut[1]); else l=MAX_LINELEN-16;
  46.   if(l<=0 || cut[0][0]==0) return;
  47.   if(l>BUFFERLEN-16) l=BUFFERLEN-16;
  48.   readfile(cut[0],textbuf+3,l);
  49. }
  50.  
  51. void cmd_record(char *p)
  52. {
  53.   char *cut[2];
  54.   cutwords(p,cut,2);
  55.   if(cut[1][0]==0) return;
  56.   datafile_fnd_record(cut[1],atoi(cut[0]),textbuf+3);
  57. }
  58.  
  59. void cmd_recordcnt(char *p)
  60. {
  61.   char *p1;
  62.   p1=find_word_start(p);
  63.   if(*p1==0) return;
  64.   *find_word_end(p1)=0;
  65.   snprintf(textbuf+3,16,"%d",datafile_recordnum(p1));
  66. }
  67.  
  68. struct cmdlist cmdlist[]={
  69.   {"forkcnt",    cmd_forklist},
  70.   {"forkcount",    cmd_forklist},
  71.   {"forklist",    cmd_forklist},
  72.   {"getscore",    cmd_getscore},
  73.   {"ping",    cmd_ping},
  74.   {"readfile",    cmd_readfile},
  75.   {"record",    cmd_record},
  76.   {"recordcnt",    cmd_recordcnt},
  77.   {"recordcount",    cmd_recordcnt},
  78.   {"recordno",    cmd_recordcnt},
  79.   {"recordnum",    cmd_recordcnt},
  80.   {"scorelog",    cmd_scorelog},
  81.   {"test",    cmd_test},
  82. };
  83. int cmdcnt=(sizeof(cmdlist)/sizeof(cmdlist[0]));
  84.  
  85. void cmd(void)
  86. {
  87.   char *p1, *p2, cmdline[MAX_LINELEN+1];
  88.   int i;
  89.  
  90.   errno=0;
  91.   p1=find_word_start(textptr); p2=find_word_end(p1);
  92.   if(*p2) *p2++=0;
  93.   i=search_list(cmdlist,cmdcnt,sizeof(cmdlist[0]),p1);
  94.   if(i<0) {sockerror(2,"bad_cmd %s",p1); return;}
  95.   mystrncpy(cmdline,find_word_start(p2),sizeof(cmdline));
  96.   memmove(textbuf,"OK\n",4);
  97.   cmdlist[i].routine(cmdline);
  98. }
  99.  
  100.