Diff for /ansh/src/daemon3.c between versions 1.2 and 1.3.2.2

version 1.2, 2011/10/17 20:14:02 version 1.3.2.2, 2012/02/15 16:54:44
Line 83  void * Line 83  void *
 icmpRx(sched_task_t *task)  icmpRx(sched_task_t *task)
 {  {
         u_char *buf, *str;          u_char *buf, *str;
        struct sockaddr sa;        io_sockaddr_t sa;
         int rlen, n = 0, salen = sizeof sa;          int rlen, n = 0, salen = sizeof sa;
         struct tagProc *proc = NULL;          struct tagProc *proc = NULL;
         char ret;          char ret;
Line 151  icmpRx(sched_task_t *task) Line 151  icmpRx(sched_task_t *task)
         proc->proc_rlen_[NET2FD] = rlen;          proc->proc_rlen_[NET2FD] = rlen;
         memset(proc->proc_buf_[NET2FD], 0, proc->proc_blen);          memset(proc->proc_buf_[NET2FD], 0, proc->proc_blen);
         memcpy(proc->proc_buf_[NET2FD], buf, proc->proc_rlen_[NET2FD]);          memcpy(proc->proc_buf_[NET2FD], buf, proc->proc_rlen_[NET2FD]);
        schedWrite(TASK_ROOT(task), fdTx, proc, proc->proc_pty);        schedWrite(TASK_ROOT(task), fdTx, proc, proc->proc_pty, NULL, 0);
 end:  end:
         free(buf);          free(buf);
        schedRead(TASK_ROOT(task), icmpRx, NULL, proc ? proc->proc_sock : TASK_FD(task));        schedRead(TASK_ROOT(task), icmpRx, NULL, proc ? proc->proc_sock : TASK_FD(task), NULL, 0);
         return NULL;          return NULL;
 }  }
   
Line 162  void * Line 162  void *
 fdTx(sched_task_t *task)  fdTx(sched_task_t *task)
 {  {
         struct tagProc *proc;          struct tagProc *proc;
        struct timeval tv = { 0 };        struct timespec ts = { 0 };
         int wlen;          int wlen;
   
         FTRACE(3);          FTRACE(3);
Line 177  fdTx(sched_task_t *task) Line 177  fdTx(sched_task_t *task)
   
         /* if Timeout defined, disarm timer */          /* if Timeout defined, disarm timer */
         if (Timeout)          if (Timeout)
                schedCancelby(TASK_ROOT(task), &TASK_ROOT(task)->root_timer, CRITERIA_CALL, TOfunc, NULL);                schedCancelby(TASK_ROOT(task), taskTIMER, CRITERIA_CALL, TOfunc, NULL);
   
         wlen = write(TASK_FD(task), proc->proc_buf_[NET2FD], proc->proc_rlen_[NET2FD]);          wlen = write(TASK_FD(task), proc->proc_buf_[NET2FD], proc->proc_rlen_[NET2FD]);
         switch (wlen) {          switch (wlen) {
Line 193  fdTx(sched_task_t *task) Line 193  fdTx(sched_task_t *task)
   
         /* if Timeout defined, go arm timer */          /* if Timeout defined, go arm timer */
         if (Timeout) {          if (Timeout) {
                tv.tv_sec = Timeout;                ts.tv_sec = Timeout;
                schedTimer(TASK_ROOT(task), TOfunc, proc, tv);                schedTimer(TASK_ROOT(task), TOfunc, proc, ts, NULL, 0);
         }          }
         return NULL;          return NULL;
 }  }
Line 203  void * Line 203  void *
 fdRx(sched_task_t *task)  fdRx(sched_task_t *task)
 {  {
         struct tagProc *proc;          struct tagProc *proc;
        struct timeval tv = { 0 };        struct timespec ts = { 0 };
         int rlen;          int rlen;
   
         FTRACE(3);          FTRACE(3);
Line 216  fdRx(sched_task_t *task) Line 216  fdRx(sched_task_t *task)
   
         /* if Timeout defined, disarm timer */          /* if Timeout defined, disarm timer */
         if (Timeout)          if (Timeout)
                schedCancelby(TASK_ROOT(task), &TASK_ROOT(task)->root_timer, CRITERIA_CALL, TOfunc, NULL);                schedCancelby(TASK_ROOT(task), taskTIMER, CRITERIA_CALL, TOfunc, NULL);
   
         memset(proc->proc_buf_[FD2NET], 0, proc->proc_blen);          memset(proc->proc_buf_[FD2NET], 0, proc->proc_blen);
         rlen = read(TASK_FD(task), proc->proc_buf_[FD2NET],           rlen = read(TASK_FD(task), proc->proc_buf_[FD2NET], 
Line 233  fdRx(sched_task_t *task) Line 233  fdRx(sched_task_t *task)
         }          }
         VERB(3) LOG("Readed %d bytes - %s", rlen, proc->proc_buf_[FD2NET]);          VERB(3) LOG("Readed %d bytes - %s", rlen, proc->proc_buf_[FD2NET]);
   
        schedWrite(TASK_ROOT(task), icmpTx, proc, proc->proc_sock);        schedWrite(TASK_ROOT(task), icmpTx, proc, proc->proc_sock, NULL, 0);
        schedRead(TASK_ROOT(task), fdRx, proc, proc->proc_pty);        schedRead(TASK_ROOT(task), fdRx, proc, proc->proc_pty, NULL, 0);
   
         /* if Timeout defined, go arm timer */          /* if Timeout defined, go arm timer */
         if (Timeout) {          if (Timeout) {
                tv.tv_sec = Timeout;                ts.tv_sec = Timeout;
                schedTimer(TASK_ROOT(task), TOfunc, proc, tv);                schedTimer(TASK_ROOT(task), TOfunc, proc, ts, NULL, 0);
         }          }
         return NULL;          return NULL;
 }  }
Line 248  int Line 248  int
 spawnLogin(sched_task_t *task, struct tagProc *proc)  spawnLogin(sched_task_t *task, struct tagProc *proc)
 {  {
         int flg;          int flg;
        struct timeval tv = { 0 };        struct timespec ts = { 0 };
         char str[STRSIZ] = { 0 };          char str[STRSIZ] = { 0 };
         struct sockaddr_in *sin;  
         struct sockaddr_in6 *sin6;  
   
         FTRACE(3);          FTRACE(3);
   
Line 266  spawnLogin(sched_task_t *task, struct tagProc *proc) Line 264  spawnLogin(sched_task_t *task, struct tagProc *proc)
                         printf("ansh3d ELWIX remote management system over ICMP (%s)\n\n",                           printf("ansh3d ELWIX remote management system over ICMP (%s)\n\n", 
                                         proc->proc_ttyname);                                          proc->proc_ttyname);
                         strlcpy(str, "-hansh3@", sizeof str);                          strlcpy(str, "-hansh3@", sizeof str);
                        if (proc->proc_cli.sa_family == AF_INET) {                        if (proc->proc_cli.sa.sa_family == AF_INET)
                                sin = (struct sockaddr_in*) &proc->proc_cli;                                inet_ntop(AF_INET, &proc->proc_cli.sin.sin_addr, str + 8, INET_ADDRSTRLEN);
                                inet_ntop(AF_INET, &sin->sin_addr, str + 8, INET_ADDRSTRLEN);                        else if (proc->proc_cli.sa.sa_family == AF_INET6)
                        } else if (proc->proc_cli.sa_family == AF_INET6) {                                inet_ntop(AF_INET6, &proc->proc_cli.sin6.sin6_addr, str + 8, INET6_ADDRSTRLEN);
                                sin6 = (struct sockaddr_in6*) &proc->proc_cli; 
                                inet_ntop(AF_INET6, &sin6->sin6_addr, str + 8, INET6_ADDRSTRLEN); 
                        } 
                         execl("/usr/bin/login", "login", str, NULL);                          execl("/usr/bin/login", "login", str, NULL);
                         /* never reached */                          /* never reached */
                         return -1;                          return -1;
Line 281  spawnLogin(sched_task_t *task, struct tagProc *proc) Line 276  spawnLogin(sched_task_t *task, struct tagProc *proc)
                         fcntl(proc->proc_pty, F_SETFL, flg | O_NONBLOCK);                          fcntl(proc->proc_pty, F_SETFL, flg | O_NONBLOCK);
   
                         VERB(3) LOG("Parent know child pid %d", proc->proc_pid);                          VERB(3) LOG("Parent know child pid %d", proc->proc_pid);
                        schedRead(TASK_ROOT(task), fdRx, proc, proc->proc_pty);                        schedRead(TASK_ROOT(task), fdRx, proc, proc->proc_pty, NULL, 0);
   
                         /* if Timeout defined, go arm timer */                          /* if Timeout defined, go arm timer */
                         if (Timeout) {                          if (Timeout) {
                                tv.tv_sec = Timeout;                                ts.tv_sec = Timeout;
                                schedTimer(TASK_ROOT(task), TOfunc, proc, tv);                                schedTimer(TASK_ROOT(task), TOfunc, proc, ts, NULL, 0);
                         }                          }
                         break;                          break;
         }          }

Removed from v.1.2  
changed lines
  Added in v.1.3.2.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>