Beispiel #1
0
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;
	}
}
Beispiel #2
0
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);
}