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;
}