diff --git a/apps/conference/Conference.cpp b/apps/conference/Conference.cpp index 4cabfdf7..303495d6 100644 --- a/apps/conference/Conference.cpp +++ b/apps/conference/Conference.cpp @@ -71,6 +71,8 @@ string ConferenceFactory::DialoutSuffix; PlayoutType ConferenceFactory::m_PlayoutType = ADAPTIVE_PLAYOUT; unsigned int ConferenceFactory::MaxParticipants; +bool ConferenceFactory::UseRFC4240Rooms; + #ifdef USE_MYSQL mysqlpp::Connection ConferenceFactory::Connection(mysqlpp::use_exceptions); @@ -291,6 +293,9 @@ int ConferenceFactory::onLoad() ERROR("while parsing max_participants parameter\n"); } + UseRFC4240Rooms = cfg.getParameter("use_rfc4240_rooms")=="yes"; + DBG("%ssing RFC4240 room naming.\n", UseRFC4240Rooms?"U":"Not u"); + return 0; } @@ -302,7 +307,21 @@ AmSession* ConferenceFactory::onInvite(const AmSipRequest& req) DBG("Conference is full.\n"); throw AmSession::Exception(486, "Busy Here"); } - return new ConferenceDialog(req.user); + + string conf_id=req.user; + + if (UseRFC4240Rooms) { + // see RFC4240 5. Conference Service + if (req.user.length()<5) + throw AmSession::Exception(404, "Not Found"); + + if (req.user.substr(0,5)!="conf=") + throw AmSession::Exception(404, "Not Found"); + + conf_id = req.user.substr(5); + } + + return new ConferenceDialog(conf_id); } AmSession* ConferenceFactory::onRefer(const AmSipRequest& req) @@ -351,8 +370,7 @@ ConferenceDialog::~ConferenceDialog() #endif } -void ConferenceDialog::onStart() -{ +void ConferenceDialog::onStart() { } void ConferenceDialog::onSessionStart(const AmSipRequest& req) diff --git a/apps/conference/Conference.h b/apps/conference/Conference.h index 01bf731c..ea88018b 100644 --- a/apps/conference/Conference.h +++ b/apps/conference/Conference.h @@ -83,6 +83,8 @@ public: static string DialoutSuffix; static PlayoutType m_PlayoutType; static unsigned int MaxParticipants; + static bool UseRFC4240Rooms; + #ifdef USE_MYSQL static mysqlpp::Connection Connection; diff --git a/apps/conference/etc/conference.conf b/apps/conference/etc/conference.conf index 02cbea38..51d21f97 100644 --- a/apps/conference/etc/conference.conf +++ b/apps/conference/etc/conference.conf @@ -22,3 +22,14 @@ playout_type=adaptive_playout # Maximum number of participants in a conference # default = 0 (unlimited) #max_participants=10 + +# use_rfc4240_rooms=[yes|no] +# +# RFC4240 specifies for Conference service that the conference +# room is specified in the user part of the Request URI as: +# sip:conf=uniqueIdentifier@mediaserver.example.net +# If the conference-id is empty, a 404 is returned. +# +#default: +# use_rfc4240_rooms=no +# \ No newline at end of file