|
|
| version 1.1.1.1.2.1, 2011/10/10 09:11:48 | version 1.1.1.1.2.4, 2011/10/13 14:29:30 |
|---|---|
| Line 31 pktTx(sched_task_t *task) | Line 31 pktTx(sched_task_t *task) |
| } | } |
| } | } |
| if ((wlen = pktSend(TASK_FD(task), proc->proc_id, proc->proc_flg, Crypted, proc->proc_buf_[FD2NET], | if ((wlen = pktSend(TASK_FD(task), ++proc->proc_seq, proc->proc_flg, Crypted, |
| proc->proc_rlen_[FD2NET], &proc->proc_ea)) != ANSH_FLG_ERR) { | proc->proc_buf_[FD2NET], proc->proc_rlen_[FD2NET], |
| &proc->proc_ea)) != ANSH_FLG_ERR) { | |
| proc->proc_flg = ANSH_FLG_OK; | proc->proc_flg = ANSH_FLG_OK; |
| proc->proc_rlen_[FD2NET] = 0; | proc->proc_rlen_[FD2NET] = 0; |
| } | } |
| Line 50 pktRx(sched_task_t *task) | Line 51 pktRx(sched_task_t *task) |
| struct tagProc *proc = NULL; | struct tagProc *proc = NULL; |
| char ret; | char ret; |
| u_short *b; | u_short *b; |
| u_int seq; | |
| FTRACE(3); | FTRACE(3); |
| Line 57 pktRx(sched_task_t *task) | Line 59 pktRx(sched_task_t *task) |
| if (!(buf = malloc(rlen))) | if (!(buf = malloc(rlen))) |
| goto end; | goto end; |
| if ((ret = pktRecv(TASK_FD(task), &Crypted, buf, &rlen, ð)) == ANSH_FLG_ERR) | if ((ret = pktRecv(TASK_FD(task), &seq, &Crypted, buf, &rlen, ð)) == ANSH_FLG_ERR) |
| goto end; | goto end; |
| VERB(5) LOG("Received %d bytes", rlen); | VERB(5) LOG("Received %d bytes", rlen); |
| if (!(ret & ANSH_FLG_CPOUT)) | if (!(ret & ANSH_FLG_CPOUT)) |
| Line 86 pktRx(sched_task_t *task) | Line 88 pktRx(sched_task_t *task) |
| switch (ret) { | switch (ret) { |
| case ANSH_FLG_EOF: | case ANSH_FLG_EOF: |
| case ANSH_FLG_CPOUT: | case ANSH_FLG_CPOUT: |
| if (seq <= proc->proc_seq) | |
| goto end; | |
| else if (seq > (proc->proc_seq + 1)) | |
| LOG("LOST PACKET(s) detect: %d; received seq=%d - %d", | |
| seq - proc->proc_seq + 1, seq, proc->proc_seq); | |
| proc->proc_seq = seq; | |
| break; | break; |
| case ANSH_FLG_WINZ: | case ANSH_FLG_WINZ: |
| b = (u_short*) buf; | b = (u_short*) buf; |
| Line 132 fdTx(sched_task_t *task) | Line 140 fdTx(sched_task_t *task) |
| schedCancelby(TASK_ROOT(task), NULL, CRITERIA_FD, (void*) TASK_FD(task), NULL); | schedCancelby(TASK_ROOT(task), NULL, CRITERIA_FD, (void*) TASK_FD(task), NULL); |
| proc->proc_pid = 0; | proc->proc_pid = 0; |
| proc->proc_seq = 0; | |
| proc->proc_flg = ANSH_FLG_EOF; | proc->proc_flg = ANSH_FLG_EOF; |
| proc->proc_rlen_[FD2NET] = 0; | proc->proc_rlen_[FD2NET] = 0; |
| schedWrite(TASK_ROOT(task), pktTx, proc, proc->proc_sock); | schedCallOnce(TASK_ROOT(task), pktTx, proc, proc->proc_sock); |
| return NULL; | return NULL; |
| } | } |
| Line 153 fdTx(sched_task_t *task) | Line 162 fdTx(sched_task_t *task) |
| schedCancelby(TASK_ROOT(task), NULL, CRITERIA_FD, (void*) TASK_FD(task), NULL); | schedCancelby(TASK_ROOT(task), NULL, CRITERIA_FD, (void*) TASK_FD(task), NULL); |
| proc->proc_pid = 0; | proc->proc_pid = 0; |
| proc->proc_seq = 0; | |
| proc->proc_flg = ANSH_FLG_EOF; | proc->proc_flg = ANSH_FLG_EOF; |
| proc->proc_rlen_[FD2NET] = 0; | proc->proc_rlen_[FD2NET] = 0; |
| schedWrite(TASK_ROOT(task), pktTx, proc, proc->proc_sock); | 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 192 fdRx(sched_task_t *task) | Line 202 fdRx(sched_task_t *task) |
| schedCancelby(TASK_ROOT(task), NULL, CRITERIA_FD, (void*) TASK_FD(task), NULL); | schedCancelby(TASK_ROOT(task), NULL, CRITERIA_FD, (void*) TASK_FD(task), NULL); |
| proc->proc_pid = 0; | proc->proc_pid = 0; |
| proc->proc_seq = 0; | |
| proc->proc_flg = ANSH_FLG_EOF; | proc->proc_flg = ANSH_FLG_EOF; |
| proc->proc_rlen_[FD2NET] = 0; | proc->proc_rlen_[FD2NET] = 0; |
| schedWrite(TASK_ROOT(task), pktTx, proc, proc->proc_sock); | schedCallOnce(TASK_ROOT(task), pktTx, proc, proc->proc_sock); |
| return NULL; | return NULL; |
| } | } |
| Line 204 fdRx(sched_task_t *task) | Line 215 fdRx(sched_task_t *task) |
| 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); |
| 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], proc->proc_blen); | rlen = read(TASK_FD(task), proc->proc_buf_[FD2NET], |
| proc->proc_blen - ETHER_HDR_LEN + sizeof(struct ansh_hdr)); | |
| switch (rlen) { | switch (rlen) { |
| case -1: | case -1: |
| ERR("readtty #%d - %s", errno, strerror(errno)); | ERR("readtty #%d - %s", errno, strerror(errno)); |
| Line 216 fdRx(sched_task_t *task) | Line 228 fdRx(sched_task_t *task) |
| VERB(3) LOG("EOF process status %d", rlen); | VERB(3) LOG("EOF process status %d", rlen); |
| proc->proc_pid = 0; | proc->proc_pid = 0; |
| proc->proc_seq = 0; | |
| proc->proc_flg = ANSH_FLG_EOF; | proc->proc_flg = ANSH_FLG_EOF; |
| proc->proc_rlen_[FD2NET] = 0; | proc->proc_rlen_[FD2NET] = 0; |
| schedWrite(TASK_ROOT(task), pktTx, proc, proc->proc_sock); | 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 227 fdRx(sched_task_t *task) | Line 240 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), pktTx, proc, proc->proc_sock); | schedCallOnce(TASK_ROOT(task), pktTx, proc, proc->proc_sock); |
| schedRead(TASK_ROOT(task), fdRx, proc, proc->proc_pty); | schedRead(TASK_ROOT(task), fdRx, proc, proc->proc_pty); |
| /* if Timeout defined, go arm timer */ | /* if Timeout defined, go arm timer */ |