|
|
| version 1.1.1.1.2.7, 2011/10/14 07:47:21 | version 1.2, 2011/10/17 20:14:02 |
|---|---|
| Line 52 pktTx(sched_task_t *task) | Line 52 pktTx(sched_task_t *task) |
| { | { |
| struct tagProc *proc; | struct tagProc *proc; |
| int wlen; | int wlen; |
| u_char *str; | |
| FTRACE(3); | FTRACE(3); |
| Line 60 pktTx(sched_task_t *task) | Line 59 pktTx(sched_task_t *task) |
| if (!(proc = TASK_ARG(task))) | if (!(proc = TASK_ARG(task))) |
| return (void*) -1; | return (void*) -1; |
| if (Crypted) { | |
| str = cryptBuffer(proc->proc_buf_[FD2NET], proc->proc_rlen_[FD2NET], Crypted); | |
| if (str) { | |
| memcpy(proc->proc_buf_[FD2NET], str, proc->proc_rlen_[FD2NET]); | |
| free(str); | |
| } | |
| } | |
| if ((wlen = pktSend(TASK_FD(task), ++proc->proc_seq, proc->proc_flg, Crypted, | if ((wlen = pktSend(TASK_FD(task), ++proc->proc_seq, proc->proc_flg, Crypted, |
| proc->proc_buf_[FD2NET], proc->proc_rlen_[FD2NET], | proc->proc_buf_[FD2NET], proc->proc_rlen_[FD2NET], |
| &proc->proc_ea)) != ANSH_FLG_ERR) { | &proc->proc_ea)) != ANSH_FLG_ERR) { |
| Line 82 pktTx(sched_task_t *task) | Line 73 pktTx(sched_task_t *task) |
| void * | void * |
| pktRx(sched_task_t *task) | pktRx(sched_task_t *task) |
| { | { |
| u_char *buf, *str; | u_char *buf; |
| struct ether_header eth; | struct ether_header eth; |
| int rlen, n = 0; | int rlen, n = 0; |
| struct tagProc *proc = NULL; | struct tagProc *proc = NULL; |
| Line 116 pktRx(sched_task_t *task) | Line 107 pktRx(sched_task_t *task) |
| goto end; | goto end; |
| } | } |
| if (Crypted) { | |
| str = cryptBuffer(buf, rlen, Crypted); | |
| if (str) { | |
| memcpy(buf, str, rlen); | |
| free(str); | |
| } | |
| } | |
| switch (ret) { | switch (ret) { |
| case ANSH_FLG_EOF: | case ANSH_FLG_EOF: |
| case ANSH_FLG_CPOUT: | case ANSH_FLG_CPOUT: |
| Line 174 fdTx(sched_task_t *task) | Line 157 fdTx(sched_task_t *task) |
| if (proc->proc_flg != ANSH_FLG_CPOUT || !proc->proc_pid) | if (proc->proc_flg != ANSH_FLG_CPOUT || !proc->proc_pid) |
| return NULL; | return NULL; |
| if (waitpid(proc->proc_pid, &wlen, WNOHANG)) { | |
| ioFreePTY(TASK_FD(task), proc->proc_ttyname); | |
| schedCancelby(TASK_ROOT(task), NULL, CRITERIA_FD, (void*) TASK_FD(task), NULL); | |
| proc->proc_pid = 0; | |
| proc->proc_seq = 0; | |
| proc->proc_flg = ANSH_FLG_EOF; | |
| proc->proc_rlen_[FD2NET] = 0; | |
| schedCallOnce(TASK_ROOT(task), pktTx, proc, proc->proc_sock); | |
| return NULL; | |
| } | |
| /* 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), &TASK_ROOT(task)->root_timer, CRITERIA_CALL, TOfunc, NULL); |
| Line 196 fdTx(sched_task_t *task) | Line 166 fdTx(sched_task_t *task) |
| case -1: | case -1: |
| ERR("write2tty #%d - %s", errno, strerror(errno)); | ERR("write2tty #%d - %s", errno, strerror(errno)); |
| /* exit from shell and release tty */ | /* exit from shell and release tty */ |
| waitpid(proc->proc_pid, &wlen, 0); | |
| ioFreePTY(TASK_FD(task), proc->proc_ttyname); | |
| schedCancelby(TASK_ROOT(task), NULL, CRITERIA_FD, (void*) TASK_FD(task), NULL); | |
| proc->proc_pid = 0; | |
| proc->proc_seq = 0; | |
| proc->proc_flg = ANSH_FLG_EOF; | |
| proc->proc_rlen_[FD2NET] = 0; | |
| schedCallOnce(TASK_ROOT(task), pktTx, proc, proc->proc_sock); | |
| return NULL; | return NULL; |
| default: | default: |
| proc->proc_flg = ANSH_FLG_OK; | proc->proc_flg = ANSH_FLG_OK; |
| Line 236 fdRx(sched_task_t *task) | Line 196 fdRx(sched_task_t *task) |
| if (!proc->proc_pid) | if (!proc->proc_pid) |
| return NULL; | return NULL; |
| if (waitpid(proc->proc_pid, &rlen, WNOHANG)) { | |
| ioFreePTY(TASK_FD(task), proc->proc_ttyname); | |
| schedCancelby(TASK_ROOT(task), NULL, CRITERIA_FD, (void*) TASK_FD(task), NULL); | |
| proc->proc_pid = 0; | |
| proc->proc_seq = 0; | |
| proc->proc_flg = ANSH_FLG_EOF; | |
| proc->proc_rlen_[FD2NET] = 0; | |
| schedCallOnce(TASK_ROOT(task), pktTx, proc, proc->proc_sock); | |
| return NULL; | |
| } | |
| /* 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), &TASK_ROOT(task)->root_timer, CRITERIA_CALL, TOfunc, NULL); |
| Line 261 fdRx(sched_task_t *task) | Line 208 fdRx(sched_task_t *task) |
| ERR("readtty #%d - %s", errno, strerror(errno)); | ERR("readtty #%d - %s", errno, strerror(errno)); |
| case 0: | case 0: |
| /* exit from shell and release tty */ | /* exit from shell and release tty */ |
| waitpid(proc->proc_pid, &rlen, 0); | |
| ioFreePTY(TASK_FD(task), proc->proc_ttyname); | |
| schedCancelby(TASK_ROOT(task), NULL, CRITERIA_FD, (void*) TASK_FD(task), NULL); | |
| VERB(3) LOG("EOF process status %d", rlen); | |
| proc->proc_pid = 0; | |
| proc->proc_seq = 0; | |
| proc->proc_flg = ANSH_FLG_EOF; | |
| proc->proc_rlen_[FD2NET] = 0; | |
| schedCallOnce(TASK_ROOT(task), pktTx, proc, proc->proc_sock); | |
| return NULL; | return NULL; |
| default: | default: |
| proc->proc_flg = ANSH_FLG_OK; | proc->proc_flg = ANSH_FLG_OK; |