Lines Matching refs:tm
206 static int handle_iacs(struct term_session *tm, int c, int fd) in handle_iacs() argument
211 curr = start = tm->buff2+tm->buff2_avail; in handle_iacs()
212 end = tm->buff2 + c -1; in handle_iacs()
213 tm->rem = 0; in handle_iacs()
230 tm->rem = 1; in handle_iacs()
247 tm->rem = end - curr; in handle_iacs()
256 curr++, tm->rem++; in handle_iacs()
259 tm->rem++; in handle_iacs()
262 tm->rem = 0; in handle_iacs()
270 memcpy(start + i, end - tm->rem, tm->rem); //put remaining if we break; in handle_iacs()
305 struct term_session *tm = NULL; in telnetd_main() local
321 tm = xzalloc(sizeof(struct term_session)); in telnetd_main()
322 tm->child_pid = TT.fork_pid; in telnetd_main()
323 tm->new_fd = 0; in telnetd_main()
324 tm->pty_fd = pty_fd; in telnetd_main()
326 tm->next = session_list; in telnetd_main()
327 session_list = tm; in telnetd_main()
328 } else session_list = tm; in telnetd_main()
343 tm = session_list; in telnetd_main()
344 while (tm) { in telnetd_main()
346 if (tm->pty_fd > 0 && tm->buff1_avail < BUFSIZE) FD_SET(tm->pty_fd, &rd); in telnetd_main()
347 if (tm->new_fd >= 0 && tm->buff2_avail < BUFSIZE) FD_SET(tm->new_fd, &rd); in telnetd_main()
348 if (tm->pty_fd > 0 && (tm->buff2_avail - tm->buff2_written) > 0) in telnetd_main()
349 FD_SET(tm->pty_fd, &wr); in telnetd_main()
350 if (tm->new_fd >= 0 && (tm->buff1_avail - tm->buff1_written) > 0) in telnetd_main()
351 FD_SET(tm->new_fd, &wr); in telnetd_main()
352 tm = tm->next; in telnetd_main()
369 tm = xzalloc(sizeof(struct term_session)); in telnetd_main()
370 tm->child_pid = TT.fork_pid; in telnetd_main()
371 tm->new_fd = new_fd; in telnetd_main()
372 tm->pty_fd = pty_fd; in telnetd_main()
374 tm->next = session_list; in telnetd_main()
375 session_list = tm; in telnetd_main()
376 } else session_list = tm; in telnetd_main()
379 tm = session_list; in telnetd_main()
380 for (;tm;tm=tm->next) { in telnetd_main()
381 if (FD_ISSET(tm->pty_fd, &rd)) { in telnetd_main()
382 if ((c = read(tm->pty_fd, tm->buff1 + tm->buff1_avail, in telnetd_main()
383 BUFSIZE-tm->buff1_avail)) <= 0) break; in telnetd_main()
384 tm->buff1_avail += c; in telnetd_main()
385 if ((w = dup_iacs(tm->buff1 + tm->buff1_written, tm->new_fd + inetd_m, in telnetd_main()
386 tm->buff1_avail - tm->buff1_written)) < 0) break; in telnetd_main()
387 tm->buff1_written += w; in telnetd_main()
389 if (FD_ISSET(tm->new_fd, &rd)) { in telnetd_main()
390 if ((c = read(tm->new_fd, tm->buff2+tm->buff2_avail, in telnetd_main()
391 BUFSIZE-tm->buff2_avail)) <= 0) break; in telnetd_main()
392 c = handle_iacs(tm, c, tm->pty_fd); in telnetd_main()
393 tm->buff2_avail += c; in telnetd_main()
394 if ((w = write(tm->pty_fd, tm->buff2+ tm->buff2_written, in telnetd_main()
395 tm->buff2_avail - tm->buff2_written)) < 0) break; in telnetd_main()
396 tm->buff2_written += w; in telnetd_main()
398 if (FD_ISSET(tm->pty_fd, &wr)) { in telnetd_main()
399 if ((w = write(tm->pty_fd, tm->buff2 + tm->buff2_written, in telnetd_main()
400 tm->buff2_avail - tm->buff2_written)) < 0) break; in telnetd_main()
401 tm->buff2_written += w; in telnetd_main()
403 if (FD_ISSET(tm->new_fd, &wr)) { in telnetd_main()
404 if ((w = dup_iacs(tm->buff1 + tm->buff1_written, tm->new_fd + inetd_m, in telnetd_main()
405 tm->buff1_avail - tm->buff1_written)) < 0) break; in telnetd_main()
406 tm->buff1_written += w; in telnetd_main()
408 if (tm->buff1_written == tm->buff1_avail) in telnetd_main()
409 tm->buff1_written = tm->buff1_avail = 0; in telnetd_main()
410 if (tm->buff2_written == tm->buff2_avail) in telnetd_main()
411 tm->buff2_written = tm->buff2_avail = 0; in telnetd_main()
428 for (tm = session_list; tm; tm = tm->next) { in telnetd_main()
429 if (tm->child_pid == pid) break; in telnetd_main()
430 prev = tm; in telnetd_main()
432 if (!tm) return; // reparented child we don't care about in telnetd_main()
436 else prev->next = tm->next; in telnetd_main()
438 xclose(tm->pty_fd); in telnetd_main()
439 xclose(tm->new_fd); in telnetd_main()
440 free(tm); in telnetd_main()