static void done(int eno) { if (ttyflg) (void)tcsetattr(STDIN_FILENO, TCSAFLUSH, &tt); term_destroy(term); term_destroy(term2); (void)close(master); (void)close(master2); exit(eno); }
void telnet_process() { if (sock_telnet.sock_flags & SF_CONNECTED) { /* Just connected */ sock_telnet.sock_flags &= ~SF_CONNECTED; sock_telnet.sock_flags |= SF_PUSH; telnet_send_opt(&sock_telnet.sbuf, TELNET_DO, TELNET_OPT_GOAHEAD); telnet_send_opt(&sock_telnet.sbuf, TELNET_WILL, TELNET_OPT_GOAHEAD); telnet_send_opt(&sock_telnet.sbuf, TELNET_WILL, TELNET_OPT_ECHO); //bprintf(&sock_telnet.sbuf, "Testing...\r\n"); telnet_term.in = &sock_telnet.rbuf; telnet_term.out = &sock_telnet.sbuf; term_create(&telnet_term); } switch (sock_telnet.sock_state) { case TCP_CLOSE_WAIT: term_destroy(&telnet_term); tcp_sock_close(&sock_telnet); break; case TCP_CLOSE: tcp_sock_listen(&sock_telnet); break; } }
void termtree_destroy(struct termtree_t *t) { int i = 0; for (; i < t->num_terms; ++i) term_destroy(&t->terms[i]); free(t->terms); free(t->ops); }
/* * Last exit routine... * Use global *tty_tmp and terms[] */ void g00dbye(void) { write_log(0," g00dbye function called from %d\n",(int)pthread_self()); term_delete_all_tty(); #ifdef HAS_CURSES if (tty_tmp->interactive && (terms->gui_th.id != 0)) thread_destroy(&terms->gui_th); #endif #ifdef HAVE_GTK if (tty_tmp->gtk && (terms->gui_gtk_th.id != 0)) { thread_destroy(&terms->gui_gtk_th); } #endif #ifdef HAVE_REMOTE_ADMIN if (tty_tmp->daemonize) admin_exit(); #endif /* Kill Uptime thread... */ if (terms->uptime_th.id) thread_destroy_cancel(terms->uptime_th.id); if (tty_tmp && tty_tmp->term) free(tty_tmp->term); /* Destroy interfaces only if they are initialized!! */ if (terms) interfaces_destroy(&terms->pcap_listen_th); protocol_destroy(); if (terms) term_destroy(); if (!tty_tmp->daemonize) { write_log(0, " Showing MOTD..\n"); show_vty_motd(); } finish_log(); if (tty_tmp) free(tty_tmp); exit(0); }