authenticated announcement (SEMS call originator)

git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@410 8eb893ce-cfd4-0310-b710-fb5ebe64c474
sayer/1.4-spce2.6
Stefan Sayer 19 years ago
parent b383f16a6f
commit 9032e2ee65

@ -28,6 +28,7 @@
#include "Announcement.h"
#include "AmConfig.h"
#include "AmUtils.h"
#include "AmPlugIn.h"
#include "sems.h"
#include "log.h"
@ -70,8 +71,7 @@ int AnnouncementFactory::onLoad()
return 0;
}
AmSession* AnnouncementFactory::onInvite(const AmSipRequest& req)
{
string AnnouncementFactory::getAnnounceFile(const AmSipRequest& req) {
string announce_path = AnnouncePath;
string announce_file = announce_path + req.domain
+ "/" + req.user + ".wav";
@ -88,11 +88,48 @@ AmSession* AnnouncementFactory::onInvite(const AmSipRequest& req)
announce_file = AnnouncePath + AnnounceFile;
end:
return new AnnouncementDialog(announce_file);
return announce_file;
}
AnnouncementDialog::AnnouncementDialog(const string& filename)
: filename(filename)
AmSession* AnnouncementFactory::onInvite(const AmSipRequest& req)
{
return new AnnouncementDialog(getAnnounceFile(req), NULL);
}
AmSession* AnnouncementFactory::onInvite(const AmSipRequest& req,
AmArg& session_params)
{
UACAuthCred* cred = NULL;
if (session_params.getType() == AmArg::AObject) {
ArgObject* cred_obj = session_params.asObject();
if (cred_obj)
cred = dynamic_cast<UACAuthCred*>(cred_obj);
}
AmSession* s = new AnnouncementDialog(getAnnounceFile(req), cred);
if (NULL == cred) {
WARN("discarding unknown session parameters.\n");
} else {
AmSessionEventHandlerFactory* uac_auth_f =
AmPlugIn::instance()->getFactory4Seh("uac_auth");
if (uac_auth_f != NULL) {
DBG("UAC Auth enabled for new announcement session.\n");
AmSessionEventHandler* h = uac_auth_f->getHandler(s);
if (h != NULL )
s->addHandler(h);
} else {
ERROR("uac_auth interface not accessible. "
"Load uac_auth for authenticated dialout.\n");
}
}
return s;
}
AnnouncementDialog::AnnouncementDialog(const string& filename,
UACAuthCred* credentials)
: filename(filename), cred(credentials)
{
}
@ -142,3 +179,7 @@ void AnnouncementDialog::process(AmEvent* event)
AmSession::process(event);
}
inline UACAuthCred* AnnouncementDialog::getCredentials() {
return cred.get();
}

@ -31,11 +31,16 @@
#include "AmSession.h"
#include "AmConfigReader.h"
#include "ampi/UACAuthAPI.h"
#include <string>
using std::string;
#include <memory>
class AnnouncementFactory: public AmSessionFactory
{
inline string getAnnounceFile(const AmSipRequest& req);
public:
static string AnnouncePath;
static string AnnounceFile;
@ -44,15 +49,21 @@ public:
int onLoad();
AmSession* onInvite(const AmSipRequest& req);
AmSession* onInvite(const AmSipRequest& req,
AmArg& session_params);
};
class AnnouncementDialog : public AmSession
class AnnouncementDialog : public AmSession,
public CredentialHolder
{
AmAudioFile wav_file;
string filename;
std::auto_ptr<UACAuthCred> cred;
public:
AnnouncementDialog(const string& filename);
AnnouncementDialog(const string& filename,
UACAuthCred* credentials = NULL);
~AnnouncementDialog();
void onSessionStart(const AmSipRequest& req);
@ -62,6 +73,8 @@ public:
void onDtmf(int event, int duration_msec) {}
void process(AmEvent* event);
UACAuthCred* getCredentials();
};
#endif

Loading…
Cancel
Save