예제 #1
0
파일: mudclient.c 프로젝트: shentino/kotaka
void telnet_do(int code)
{
	switch(code) {
	case 90:
		if (msp_active) {
			if (msp_debug) {
				previous_object()->message("Your client told us to enable MSP but we're already doing it O_O.\n");
			}
			/* ignore */
		} else if (msp_pending) {
			if (msp_debug) {
				previous_object()->message("Your client granted us permission to enable MSP :).\n");
			}
			msp_active = 1;
			msp_pending = 0;
		} else {
			if (msp_debug) {
				previous_object()->message("Your client told us to enable MSP :).\n");
			}
			query_conn()->send_will(90);
			msp_active = 1;
		}
		break;

	default:
		if (general_debug) {
			previous_object()->message("Your client sent a request for unknown telnet option " + code + ", refusing.\n");
		}
		query_conn()->send_wont(code);
	}
}
예제 #2
0
void set_mode(int new_mode)
{
	object conn;

	ACCESS_CHECK(previous_program() == LIB_CONN || SYSTEM() ||
		calling_object() == this_object());

	if (!this_object() || !query_conn() || new_mode == MODE_NOCHANGE) {
		return;
	}

	/* we have to do it this way because set_mode is also called to handle return values for hooks in the user object */
	/* this can happen more than once in a connection chain, so we need to intercept disconnects and do them */
	/* in a 0 callout to avoid double destruction */

	/* since network events are asynchronous anyway we aren't causing any actual harm */
	if (new_mode == MODE_DISCONNECT) {
		query_conn()->set_mode(MODE_BLOCK);
		conn::close(nil, 1);
		call_out("self_disconnect", 0);
		return;
	}

	query_conn()->set_mode(new_mode);
}
예제 #3
0
파일: mudclient.c 프로젝트: shentino/kotaka
void disable_msp()
{
	query_conn()->send_wont(90);

	msp_pending = 0;
	msp_active = 0;
}
예제 #4
0
파일: mudclient.c 프로젝트: shentino/kotaka
void telnet_will(int code)
{
	switch(code) {
	default:
		if (general_debug) {
			previous_object()->message("Your client sent an offer for unknown telnet option " + code + ", forbidding.\n");
		}
		query_conn()->send_dont(code);
	}
}
예제 #5
0
파일: mudclient.c 프로젝트: shentino/kotaka
void telnet_dont(int code)
{
	switch(code) {
	case 90:
		if (msp_active) {
			if (msp_debug) {
				previous_object()->message("Your client disabled MSP :(.\n");
			}
			query_conn()->send_wont(code);
			msp_active = 0;
		} else if (msp_pending) {
			if (msp_debug) {
				previous_object()->message("Your client forbade MSP :(.\n");
			}
			msp_pending = 0;
		}
		break;
	}
}
예제 #6
0
파일: mudclient.c 프로젝트: shentino/kotaka
void enable_msp()
{
	msp_pending = 1;

	query_conn()->send_will(90);
}