예제 #1
0
System_http_session::System_http_session(Move<Unique_file> socket, boost::shared_ptr<const Http::Authentication_context> auth_ctx)
	: Http::Session(STD_MOVE(socket))
	, m_auth_ctx(STD_MOVE(auth_ctx))
	, m_initialized(false), m_decoded_uri(), m_servlet()
{
	POSEIDON_LOG_INFO("System_http_session constructor: remote = ", get_remote_info());
}
예제 #2
0
파일: yppoll.c 프로젝트: ryo/netbsd-src
int
main(int  argc, char *argv[])
{
	char *domainname;
	char *hostname = NULL;
	char *inmap, *master;
	int order;
	int c, r, tcp = 0;

	(void)yp_get_default_domain(&domainname);

	while ((c = getopt(argc, argv, "Th:d:")) != -1) {
		switch (c) {
		case 'T':
			tcp = 1;
			break;
		case 'd':
			domainname = optarg;
			break;

		case 'h':
			hostname = optarg;
			break;

		default:
			usage();
			/*NOTREACHED*/
		}
	}

	if (domainname == NULL)
		errx(1, "YP domain name not set");

	argc -= optind;
	argv += optind;

	if (argc != 1)
		usage();

	inmap = argv[0];

	if (hostname != NULL)
		r = get_remote_info(domainname, inmap, hostname,
		    &order, &master, tcp);
	else {
		r = yp_order(domainname, inmap, &order);
		if (r == 0)
			r = yp_master(domainname, inmap, &master);
	}

	if (r != 0)
		errx(1, "no such map %s. Reason: %s",
		    inmap, yperr_string(r));

	(void)printf("Map %s has order number %d. %s", inmap, order,
	    ctime((void *)&order));
	(void)printf("The master server is %s.\n", master);
	return 0;
}
예제 #3
0
void System_http_session::initialize_once(const Http::Request_headers &request_headers){
	POSEIDON_PROFILE_ME;

	if(m_initialized){
		return;
	}

	const AUTO(user, Http::check_authentication_simple(m_auth_ctx, false, get_remote_info(), request_headers));
	POSEIDON_LOG_INFO("System_http_session authentication succeeded: remote = ", get_remote_info(), ", user = "******", URI = ", request_headers.uri, ", headers = ", request_headers.headers);

	Buffer_istream bis;
	bis.set_buffer(Stream_buffer(request_headers.uri));
	Http::url_decode(bis, m_decoded_uri);
	POSEIDON_THROW_UNLESS(!m_decoded_uri.empty(), Http::Exception, Http::status_bad_request);
	POSEIDON_THROW_UNLESS(m_decoded_uri[0] == '/', Http::Exception, Http::status_bad_request);
	POSEIDON_LOG_DEBUG("Decoded request URI: ", m_decoded_uri);

	switch(request_headers.verb){
	case Http::verb_options:
		break;
	case Http::verb_get:
	case Http::verb_head:
	case Http::verb_post:
		for(;;){
			m_servlet = System_http_server::get_servlet(m_decoded_uri.c_str());
			if(m_servlet){
				break;
			}
			if(*m_decoded_uri.rbegin() == '/'){
				POSEIDON_LOG_WARNING("System_http_session URI not handled: ", m_decoded_uri);
				POSEIDON_THROW(Http::Exception, Http::status_not_found);
			}
			m_decoded_uri.push_back('/');
			POSEIDON_LOG_DEBUG("Retrying: ", m_decoded_uri);
		}
		break;
	default:
		POSEIDON_THROW(Http::Exception, Http::status_method_not_allowed);
	}

	m_initialized = true;
}
예제 #4
0
파일: mmain.cpp 프로젝트: adan830/poseidon
	void on_read_avail(Poseidon::StreamBuffer data) override {
		LOG_POSEIDON_INFO("Connection read avail: remote = ", get_remote_info(),
			", data = ", data.dump());

		Poseidon::StreamBuffer buffer;
		buffer.put("[Response from echo server] ");
		buffer.splice(data);
		send(std::move(buffer));

		set_timeout(g_keep_alive_timeout);
	}
예제 #5
0
파일: mmain.cpp 프로젝트: adan830/poseidon
	void on_close(int err_code) noexcept override {
		LOG_POSEIDON_INFO("Connection error: remote = ", get_remote_info(),
			", err_code = ", err_code, ", desc = ", Poseidon::get_error_desc(err_code));
	}
예제 #6
0
파일: mmain.cpp 프로젝트: adan830/poseidon
	void on_read_hup() noexcept override {
		LOG_POSEIDON_INFO("Connection read hup: remote = ", get_remote_info());
	}
예제 #7
0
파일: mmain.cpp 프로젝트: adan830/poseidon
	void on_connect() override {
		LOG_POSEIDON_INFO("Connection established: remote = ", get_remote_info());
	}
예제 #8
0
파일: mmain.cpp 프로젝트: adan830/poseidon
	explicit Session(Poseidon::UniqueFile socket)
		: Poseidon::TcpSessionBase(std::move(socket))
	{
		get_remote_info(); // 这样后面 get_remote_info() 都不会抛出异常。
	}
예제 #9
0
System_http_session::~System_http_session(){
	POSEIDON_LOG_INFO("System_http_session destructor: remote = ", get_remote_info());
}