diff --git a/trunk/src/app/srs_app_rtc_conn.cpp b/trunk/src/app/srs_app_rtc_conn.cpp index 2da90e327..14a6ce7a4 100644 --- a/trunk/src/app/srs_app_rtc_conn.cpp +++ b/trunk/src/app/srs_app_rtc_conn.cpp @@ -1462,11 +1462,12 @@ void SrsRtcPublishStream::update_send_report_time(uint32_t ssrc, const SrsNtp& n } } -SrsRtcConnection::SrsRtcConnection(SrsRtcServer* s) +SrsRtcConnection::SrsRtcConnection(SrsRtcServer* s, SrsContextId context_id) { req = NULL; is_publisher_ = false; encrypt = true; + cid = context_id; source_ = NULL; publisher_ = NULL; @@ -1672,13 +1673,12 @@ srs_error_t SrsRtcConnection::add_player2(SrsRequest* req, SrsSdp& local_sdp) return err; } -srs_error_t SrsRtcConnection::initialize(SrsRtcStream* source, SrsRequest* r, bool is_publisher, string username, SrsContextId context_id) +srs_error_t SrsRtcConnection::initialize(SrsRtcStream* source, SrsRequest* r, bool is_publisher, string username) { srs_error_t err = srs_success; username_ = username; req = r->copy(); - cid = context_id; is_publisher_ = is_publisher; source_ = source; diff --git a/trunk/src/app/srs_app_rtc_conn.hpp b/trunk/src/app/srs_app_rtc_conn.hpp index 26c9838d8..261af68ad 100644 --- a/trunk/src/app/srs_app_rtc_conn.hpp +++ b/trunk/src/app/srs_app_rtc_conn.hpp @@ -337,7 +337,7 @@ private: // Simulators. int nn_simulate_player_nack_drop; public: - SrsRtcConnection(SrsRtcServer* s); + SrsRtcConnection(SrsRtcServer* s, SrsContextId context_id); virtual ~SrsRtcConnection(); public: // TODO: FIXME: save only connection info. @@ -360,7 +360,7 @@ public: srs_error_t add_player2(SrsRequest* request, SrsSdp& local_sdp); public: // Before initialize, user must set the local SDP, which is used to inititlize DTLS. - srs_error_t initialize(SrsRtcStream* source, SrsRequest* r, bool is_publisher, std::string username, SrsContextId context_id); + srs_error_t initialize(SrsRtcStream* source, SrsRequest* r, bool is_publisher, std::string username); // The peer address may change, we can identify that by STUN messages. srs_error_t on_stun(SrsUdpMuxSocket* skt, SrsStunPacket* r); srs_error_t on_dtls(char* data, int nb_data); diff --git a/trunk/src/app/srs_app_rtc_server.cpp b/trunk/src/app/srs_app_rtc_server.cpp index e61d44b02..9b2278445 100644 --- a/trunk/src/app/srs_app_rtc_server.cpp +++ b/trunk/src/app/srs_app_rtc_server.cpp @@ -302,6 +302,8 @@ srs_error_t SrsRtcServer::create_session( ) { srs_error_t err = srs_success; + SrsContextId cid = _srs_context->get_id(); + SrsRtcStream* source = NULL; if ((err = _srs_rtc_sources->fetch_or_create(req, &source)) != srs_success) { return srs_error_wrap(err, "create source"); @@ -313,7 +315,7 @@ srs_error_t SrsRtcServer::create_session( } // TODO: FIXME: add do_create_session to error process. - SrsRtcConnection* session = new SrsRtcConnection(this); + SrsRtcConnection* session = new SrsRtcConnection(this, cid); if ((err = do_create_session(session, req, remote_sdp, local_sdp, mock_eip, publish, source)) != srs_success) { srs_freep(session); return srs_error_wrap(err, "create session"); @@ -331,8 +333,6 @@ srs_error_t SrsRtcServer::do_create_session( { srs_error_t err = srs_success; - SrsContextId cid = _srs_context->get_id(); - // first add publisher/player for negotiate sdp media info if (publish) { if ((err = session->add_publisher(req, remote_sdp, local_sdp)) != srs_success) { @@ -393,7 +393,7 @@ srs_error_t SrsRtcServer::do_create_session( session->set_state(WAITING_STUN); // Before session initialize, we must setup the local SDP. - if ((err = session->initialize(source, req, publish, username, cid)) != srs_success) { + if ((err = session->initialize(source, req, publish, username)) != srs_success) { return srs_error_wrap(err, "init"); } @@ -405,11 +405,13 @@ srs_error_t SrsRtcServer::create_session2(SrsRequest* req, SrsSdp& local_sdp, co { srs_error_t err = srs_success; + SrsContextId cid = _srs_context->get_id(); + std::string local_pwd = srs_random_str(32); // TODO: FIXME: Collision detect. std::string local_ufrag = srs_random_str(8); - SrsRtcConnection* session = new SrsRtcConnection(this); + SrsRtcConnection* session = new SrsRtcConnection(this, cid); // first add player for negotiate local sdp media info if ((err = session->add_player2(req, local_sdp)) != srs_success) { srs_freep(session); @@ -445,8 +447,6 @@ srs_error_t SrsRtcServer::setup_session2(SrsRtcConnection* session, SrsRequest* { srs_error_t err = srs_success; - SrsContextId cid = _srs_context->get_id(); - if (session->state() != WAITING_ANSWER) { return err; } @@ -459,7 +459,7 @@ srs_error_t SrsRtcServer::setup_session2(SrsRtcConnection* session, SrsRequest* // TODO: FIXME: Collision detect. string username = session->get_local_sdp()->get_ice_ufrag() + ":" + remote_sdp.get_ice_ufrag(); - if ((err = session->initialize(source, req, false, username, cid)) != srs_success) { + if ((err = session->initialize(source, req, false, username)) != srs_success) { return srs_error_wrap(err, "init"); }