int RTSPSession::HandleSETUPRequest(RTSPPacket &requestpkt, RTSPPacket &responsepkt) { if ( RTSP::RTSP_INIT == rtspStatus_ ) { rtspStatus_ = RTSP::RTSP_READY; } string requestURI = requestpkt.GetRequestURI(); ServerMediaSession *mediaSesion = server_->FindMediaSessionByStreamName(streamName_); if ( !mediaSesion ) { RTSPDEBUG("[Warning] StreamName: %s Not Found.", streamName_.c_str()); responsepkt.SetStatusCode("404"); return -1; } string trackname = requestURI.substr(requestURI.rfind('/')+1, requestURI.length()); ServerMediaSubSession *submsession = mediaSesion->FindSubSessionByTrackName(trackname); if ( !submsession ) { RTSPDEBUG("[Warning] Trackname: %s Not Found.", trackname.c_str()); responsepkt.SetStatusCode("404"); return -1; } // "Session: %d", responsepkt.AddAHeaderLine(RTSP::HeaderField::Session, Utility::ToString(this->GetSessionID())); // "Transport: RTP/AVP;multicast;destination=%s;source=%s;port=%d-%d;ttl=%d" string transportval = "RTP/AVP;multicast;destination=" + mediaSesion->GetDestinationAddr(); unsigned short port = submsession->PortBase(); transportval += ";source=" + server_->GetLocalIPAddr() + ";port=" + Utility::ToString(port) + "-" + Utility::ToString(port+1); transportval += ";ttl=255"; responsepkt.AddAHeaderLine(RTSP::HeaderField::Transport, transportval); responsepkt.SetStatusCode("200"); return 0; }