From 518ed60c855418ea7a7f1dc4851fbd19f52d77f1 Mon Sep 17 00:00:00 2001 From: Stefan Sayer Date: Tue, 17 Feb 2009 19:43:32 +0000 Subject: [PATCH] urlcatcher application that illustrates the use of embedded URL to display a call control web page git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@1283 8eb893ce-cfd4-0310-b710-fb5ebe64c474 --- apps/urlcatcher/Makefile | 7 +++ apps/urlcatcher/UrlCatcher.cpp | 82 +++++++++++++++++++++++++++++ apps/urlcatcher/UrlCatcher.h | 54 +++++++++++++++++++ apps/urlcatcher/etc/urlcatcher.conf | 8 +++ doc/Readme.urlcatcher | 14 +++++ 5 files changed, 165 insertions(+) create mode 100644 apps/urlcatcher/Makefile create mode 100644 apps/urlcatcher/UrlCatcher.cpp create mode 100644 apps/urlcatcher/UrlCatcher.h create mode 100644 apps/urlcatcher/etc/urlcatcher.conf create mode 100644 doc/Readme.urlcatcher diff --git a/apps/urlcatcher/Makefile b/apps/urlcatcher/Makefile new file mode 100644 index 00000000..cabf8aa7 --- /dev/null +++ b/apps/urlcatcher/Makefile @@ -0,0 +1,7 @@ +plug_in_name = urlcatcher + +module_ldflags = +module_cflags = + +COREPATH ?=../../core +include $(COREPATH)/plug-in/Makefile.app_module diff --git a/apps/urlcatcher/UrlCatcher.cpp b/apps/urlcatcher/UrlCatcher.cpp new file mode 100644 index 00000000..ebb06f76 --- /dev/null +++ b/apps/urlcatcher/UrlCatcher.cpp @@ -0,0 +1,82 @@ +/* + * $Id$ + * + * Copyright (C) 2009 IPTEGO GmbH + * + * This file is part of SEMS, a free SIP media server. + * + * SEMS is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * For a license to use the SEMS software under conditions + * other than those described here, or to purchase support for this + * software, please contact iptel.org by e-mail at the following addresses: + * info@iptel.org + * + * sems is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "UrlCatcher.h" +#include "AmConfig.h" +#include "AmUtils.h" +#include "AmPlugIn.h" + +#include "sems.h" +#include "log.h" + +#include + +#define MOD_NAME "urlcatcher" +#define DEFAULT_EXEC_CMD "firefox" + +EXPORT_SESSION_FACTORY(UrlCatcherFactory,MOD_NAME); + +string UrlCatcherFactory::ExecCmd; + +UrlCatcherFactory::UrlCatcherFactory(const string& _app_name) + : AmSessionFactory(_app_name) +{ +} + +int UrlCatcherFactory::onLoad() +{ + + AmConfigReader cfg; + if(cfg.loadFile(AmConfig::ModConfigPath + string(MOD_NAME ".conf"))) { + ExecCmd = DEFAULT_EXEC_CMD; + return 0; + } + + ExecCmd = cfg.getParameter("url_exec_cmd", DEFAULT_EXEC_CMD); + INFO("UrlCatcher loaded.Exec cmd = '%s'\n", ExecCmd.c_str()); + return 0; +} + + +AmSession* UrlCatcherFactory::onInvite(const AmSipRequest& req) +{ + AmSdp sdp; + sdp.setBody(req.body.c_str()); + if (sdp.parse()) { + ERROR("SDP parsing error\n"); + throw AmSession::Exception(404, "Not Found Here (SDP parse error)"); + } + + INFO("SDP URI= '%s'\n", sdp.uri.c_str()); + if (sdp.uri.empty()) + throw AmSession::Exception(404, "Not Found Here (No Call URI found)"); + + system((UrlCatcherFactory::ExecCmd + " \""+sdp.uri+"\"").c_str()); + + throw AmSession::Exception(404, "Not Found Here (but I got your URL)"); +} + diff --git a/apps/urlcatcher/UrlCatcher.h b/apps/urlcatcher/UrlCatcher.h new file mode 100644 index 00000000..f51533dc --- /dev/null +++ b/apps/urlcatcher/UrlCatcher.h @@ -0,0 +1,54 @@ +/* + * $Id$ + * + * Copyright (C) 2009 IPTEGO GmbH + * + * This file is part of SEMS, a free SIP media server. + * + * SEMS is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * For a license to use the SEMS software under conditions + * other than those described here, or to purchase support for this + * software, please contact iptel.org by e-mail at the following addresses: + * info@iptel.org + * + * sems is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef _URLCATCHER_H_ +#define _URLCATCHER_H_ + +#include "AmSession.h" +#include "AmConfigReader.h" + +#include +using std::string; + +#include + +class UrlCatcherFactory: public AmSessionFactory +{ +public: + static string ExecCmd; + + UrlCatcherFactory(const string& _app_name); + + int onLoad(); + AmSession* onInvite(const AmSipRequest& req); +}; + +#endif +// Local Variables: +// mode:C++ +// End: + diff --git a/apps/urlcatcher/etc/urlcatcher.conf b/apps/urlcatcher/etc/urlcatcher.conf new file mode 100644 index 00000000..bffa3ec3 --- /dev/null +++ b/apps/urlcatcher/etc/urlcatcher.conf @@ -0,0 +1,8 @@ +# execute this command when an invite with URL comes in +# +# default: firefox +# +# e.g. firefox +# kfmclient exec +# +url_exec_cmd="firefox" diff --git a/doc/Readme.urlcatcher b/doc/Readme.urlcatcher new file mode 100644 index 00000000..bb1bf079 --- /dev/null +++ b/doc/Readme.urlcatcher @@ -0,0 +1,14 @@ +urlcatcher +---------- + +The urlcatcher demonstrates how to open a URL embedded in SDP +when a call comes in, like the webconference application does. +This way, e.g. a conference control web page can be shown which +allows to list participants, dial in further users etc. + +How to use it: + +o register your SEMS at some registrar with reg_agent +o direct calls to urlcatcher (application=urlcatcher) +o call yourself from https://webconference.iptel.org or your + own web interface