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; } }
static void tcp_sock_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg) { ipc_callid_t callid; ipc_call_t call; tcp_client_t client; /* Accept the connection */ async_answer_0(iid, EOK); client.sess = async_callback_receive(EXCHANGE_SERIALIZE); socket_cores_initialize(&client.sockets); while (true) { callid = async_get_call(&call); if (!IPC_GET_IMETHOD(call)) break; log_msg(LVL_DEBUG, "tcp_sock_connection: METHOD=%d\n", (int)IPC_GET_IMETHOD(call)); switch (IPC_GET_IMETHOD(call)) { case NET_SOCKET: tcp_sock_socket(&client, callid, call); break; case NET_SOCKET_BIND: tcp_sock_bind(&client, callid, call); break; case NET_SOCKET_LISTEN: tcp_sock_listen(&client, callid, call); break; case NET_SOCKET_CONNECT: tcp_sock_connect(&client, callid, call); break; case NET_SOCKET_ACCEPT: tcp_sock_accept(&client, callid, call); break; case NET_SOCKET_SEND: tcp_sock_send(&client, callid, call); break; case NET_SOCKET_SENDTO: tcp_sock_sendto(&client, callid, call); break; case NET_SOCKET_RECV: case NET_SOCKET_RECVFROM: tcp_sock_recvfrom(&client, callid, call); break; case NET_SOCKET_CLOSE: tcp_sock_close(&client, callid, call); break; case NET_SOCKET_GETSOCKOPT: tcp_sock_getsockopt(&client, callid, call); break; case NET_SOCKET_SETSOCKOPT: tcp_sock_setsockopt(&client, callid, call); break; default: async_answer_0(callid, ENOTSUP); break; } } /* Clean up */ log_msg(LVL_DEBUG, "tcp_sock_connection: Clean up"); async_hangup(client.sess); socket_cores_release(NULL, &client.sockets, &gsock, tcp_free_sock_data); }