// 处理客户端,现在 暂时不处理登录,直接接受 // 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()); }
// 处理客户端 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); } }