コード例 #1
0
ファイル: router.cpp プロジェクト: firstblade/avim
// 处理客户端,现在 暂时不处理登录,直接接受
// TODO, 修正 tcp 模式的登录协议
// TODO, 登录过程要交换证书
// TODO  服务器要验证客户端正式确实来自 avplayer.org 签发
static void process_client(boost::asio::yield_context yielder, boost::shared_ptr<boost::asio::ip::tcp::socket> client_sock)
{
	boost::asio::streambuf buf;
	boost::system::error_code ec;

	// 接收用户的 av地址
	int len = boost::asio::async_read_until(*client_sock, buf, "\r\n", yielder[ec]);

	if( ec)
		return;

	std::string useraddr; useraddr.resize(len);

	buf.sgetn(&useraddr[0], len);

	// 生成一个新的 av地址
	std::string me_addr = get_new_radom_address();

	// 返回服务器地址
	boost::asio::async_write(*client_sock, boost::asio::buffer(me_addr), yielder[ec]);
	if( ec )
		return;

	// 创建一个 tcp 的 avif 设备,然后添加进去, TODO, 证书也应该传进去
	boost::shared_ptr<avtcpif> avinterface;

	avinterface.reset(new avtcpif(client_sock, me_addr, useraddr) );

	av_if_handover(avinterface);

	// 添加路由表
	av_route(AVROUTE_ADD, useraddr, me_addr, avinterface->get_ifname());
}
コード例 #2
0
ファイル: router.cpp プロジェクト: xosdy/avim
// 处理客户端
static void process_client(boost::asio::yield_context yielder, boost::shared_ptr<boost::asio::ip::tcp::socket> client_sock, RSA * rsa_key, X509 * x509_cert)
{
	boost::system::error_code ec;
	// 生成一个新的 av地址
	std::string me_addr = get_new_radom_address();

	// 创建一个 tcp 的 avif 设备,然后添加进去
	boost::shared_ptr<avtcpif> avinterface;

	avinterface.reset(new avtcpif(client_sock, me_addr, rsa_key, x509_cert) );
	avinterface->set_root_ca((X509*)avcore.get_root_ca());

	if(	avinterface->async_master_handshake(1, yielder[ec]) )
	{
		avcore.add_interface(avinterface);
		// 添加路由表
		avcore.add_route(avinterface->remote_addr(), me_addr, avinterface->get_ifname(), 0);
	}
}