train ride doxygen documentation

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

@ -106,6 +106,10 @@ bundle: ser-0.9.6-sems tar
doc:
make -C core/ doc
.PHONY: fulldoc
fulldoc:
make -C core/ fulldoc
.PHONY: install-ser-cfg
install-ser-cfg:
make -C core/ install-ser-cfg

@ -37,6 +37,7 @@
#include <string>
using std::string;
/** \brief Factory for AnnounceB2B sessions */
class AnnounceB2BFactory: public AmSessionFactory
{
public:
@ -49,6 +50,7 @@ public:
AmSession* onInvite(const AmSipRequest& req);
};
/** \brief Session logic implementation of A leg in announce_b2b sessions */
class AnnounceCallerDialog: public AmB2BCallerSession
{
AmAudioFile wav_file;

@ -35,6 +35,7 @@
#include <string>
using std::string;
/** \brief session factory for announce_transfer sessions */
class AnnounceTransferFactory: public AmSessionFactory
{
public:
@ -47,6 +48,7 @@ public:
AmSession* onInvite(const AmSipRequest& req);
};
/** \brief session logic implementation for announce_transfer sessions */
class AnnounceTransferDialog : public AmSession
{
string callee_uri;

@ -38,6 +38,7 @@ using std::string;
#include <memory>
/** \brief Factory for announcement sessions */
class AnnouncementFactory: public AmSessionFactory
{
inline string getAnnounceFile(const AmSipRequest& req);
@ -54,6 +55,7 @@ public:
};
/**\brief announcement session logic implementation */
class AnnouncementDialog : public AmSession,
public CredentialHolder
{

@ -3,6 +3,7 @@
#include "AmAudio.h"
/** \brief audio device that generates ring tones with uesr specified period, f and f2 */
class AmRingTone: public AmAudio
{
int on_period; // ms

@ -59,6 +59,7 @@ enum { DoConfConnect = 100,
DoConfError
};
/** \brief Event to trigger connecting/disconnecting between dialout session and main conference session */
struct DialoutConfEvent : public AmEvent {
string conf_id;
@ -70,6 +71,7 @@ struct DialoutConfEvent : public AmEvent {
{}
};
/** \brief Factory for conference sessions */
class ConferenceFactory : public AmSessionFactory
{
public:
@ -90,6 +92,7 @@ public:
virtual int onLoad();
};
/** \brief session logic implementation of conference sessions */
class ConferenceDialog : public AmSession
{
AmPlaylist play_list;

@ -34,6 +34,7 @@
#include <string>
using std::string;
/** \brief Factory for early_announce sessions */
class EarlyAnnounceFactory: public AmSessionFactory
{
public:
@ -46,6 +47,7 @@ public:
AmSession* onInvite(const AmSipRequest& req);
};
/** \brief session logic implementation for early_announce sessions */
class EarlyAnnounceDialog : public AmSession
{
AmAudioFile wav_file;

@ -40,6 +40,7 @@ using std::map;
class IvrDialog;
/** \brief C++ wrapper for extra thread created by Python IVR script */
class PythonScriptThread : public AmThread {
PyObject* py_thread_object;
protected:
@ -50,7 +51,7 @@ class PythonScriptThread : public AmThread {
: py_thread_object(py_thread_object_) { }
};
/** \brief binds a script module and the python dialog class */
struct IvrScriptDesc
{
PyObject* mod;
@ -73,7 +74,7 @@ IvrScriptDesc(PyObject* mod,
{}
};
/** \brief session factory for python IVR sessions */
class IvrFactory: public AmSessionFactory
{
PyObject* ivr_module;
@ -112,7 +113,7 @@ class IvrFactory: public AmSessionFactory
void addDeferredThread(PyObject* pyCallable);
};
/** \brief python IVR wrapper for session base implementation */
class IvrDialog : public AmB2BCallerSession
{
PyObject *py_mod;

@ -14,7 +14,7 @@
#include "flite.h"
#endif
// Data definition
/** \brief IVR wrapper of AmAudioFile */
typedef struct {
PyObject_HEAD

@ -7,7 +7,7 @@
#include "AmAudioMixIn.h"
// Data definition
/** \brief python IVR wrapper for AmAudioMixIn */
typedef struct {
PyObject_HEAD

@ -1,15 +1,14 @@
#include "IvrDialogBase.h"
#include "IvrAudio.h"
#include "IvrAudioMixIn.h"
#
#include "Ivr.h"
#include "IvrSipDialog.h"
#include "AmMediaProcessor.h"
//#include "AmSessionTimer.h"
// Data definition
/** \brief python wrapper of IvrDialog, the base class for python IVR sessions */
typedef struct {
PyObject_HEAD

@ -3,7 +3,7 @@
#include "AmSipDialog.h"
#include "log.h"
// Data definition
/** \brief IVR wrapper class of AmSipDialog */
typedef struct {
PyObject_HEAD

@ -24,7 +24,7 @@
#include "log.h"
// Data definition
/** \brief IVR wrapper of AmSipReply */
typedef struct {
PyObject_HEAD

@ -25,6 +25,7 @@
#include "log.h"
// Data definition
/** \brief IVR wrapper of AmSipRequest */
typedef struct {
PyObject_HEAD

@ -27,7 +27,7 @@
#include <Python.h>
#include "structmember.h"
// Data definition
/** \brief python IVR wrapper for AmUAC functions */
typedef struct {
PyObject_HEAD

@ -55,6 +55,12 @@ EXPORT_SESSION_FACTORY(PySemsFactory,MOD_NAME);
PyMODINIT_FUNC initpy_sems_lib();
/**
* \brief gets python global interpreter lock (GIL)
*
* structure to acquire the python global interpreter lock (GIL)
* while the structure is allocated.
*/
struct PythonGIL
{
PyGILState_STATE gst;

@ -76,6 +76,7 @@ PySemsScriptDesc(PyObject* mod,
};
/** \brief Factory for PySems sessions */
class PySemsFactory: public AmSessionFactory
{
PyObject* py_sems_module;
@ -110,6 +111,7 @@ class PySemsFactory: public AmSessionFactory
AmSession* onInvite(const AmSipRequest& req);
};
/** \brief wrapper for pySems dialog bas class */
class PySemsDialogBase {
PyObject *py_mod;
PyObject *py_dlg;

@ -14,7 +14,7 @@
#include "flite.h"
#endif
// Data definition
/** \brief pySems wrapper for AmAudioFile */
typedef struct {
PyObject_HEAD

@ -29,6 +29,7 @@
class PySemsB2ABCalleeDialog;
/** \brief pySems wrapper for base of pySems dialog classes */
class PySemsB2ABDialog : public AmB2ABCallerSession,
public PySemsDialogBase
{
@ -57,6 +58,7 @@ struct PySemsB2ABEvent: public B2ABEvent
{}
};
/** \brief pySems wrapper for B leg in pysems B2AB session */
class PySemsB2ABCalleeDialog : public AmB2ABCalleeSession
{
public:

@ -28,6 +28,7 @@
#include "AmB2BSession.h"
#include "AmPlaylist.h"
/** \brief IVR wrapper of AmB2BSession */
class PySemsB2BDialog : public AmB2BCallerSession,
public PySemsDialogBase
{

@ -30,6 +30,7 @@
#include "AmPlaylist.h"
#include "PySems.h"
/** \brief implementation of session logic/script execution in pySems */
class PySemsDialog : public AmSession,
public PySemsDialogBase
{

@ -43,6 +43,7 @@ using std::string;
class AmMail;
/** \brief Factory for voicemail sessions */
class AnswerMachineFactory: public AmSessionFactory
{
map<string, EmailTemplate> email_tmpl;
@ -72,6 +73,7 @@ public:
AmSession* onInvite(const AmSipRequest& req);
};
/** \brief implementation of voicemail session logic */
class AnswerMachineDialog : public AmSession
{
AmAudioFile a_greeting,a_beep;

@ -24,6 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmAdvancedAudio.h */
#ifndef _AmAdvancedAudio_h_
#define _AmAdvancedAudio_h_
@ -87,6 +88,8 @@ class AmAudioQueue : public AmAudio {
};
/**
* \brief AmAudio device with a playlist and a background AmAudio
*
* AmAudioFrontlist is an AmAudio device, that has a playlist
* in front of a AmAudio entry, the 'back' device. The back device
* is only used if the playlist is empty. - This can be useful when

@ -25,6 +25,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmApi.h */
#ifndef _AmApi_h_
#define _AmApi_h_

@ -24,6 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmArg.h */
#ifndef _AmArg_h_
#define _AmArg_h_
@ -34,7 +35,10 @@
#include <vector>
using std::vector;
/** base for Objects as @see AmArg parameter, not owned by AmArg (!) */
/** \brief base for Objects as @see AmArg parameter
*
* not owned by AmArg (!)
*/
class ArgObject {
public:
ArgObject() { }
@ -57,10 +61,12 @@ class AmArg
Array
};
/** \brief exception thrown on access beyond array limits */
struct OutOfBoundsException {
OutOfBoundsException() { }
};
/** \brief exception thrown if the on argument type mismatch */
struct TypeMismatchException {
TypeMismatchException() { }
};

@ -39,6 +39,7 @@
#include <typeinfo>
/** \brief structure to hold loaded codec instances */
struct CodecContainer
{
amci_codec_t *codec;

@ -24,7 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmAudio.h */
#ifndef _AmAudio_h_
#define _AmAudio_h_

@ -24,7 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmAudioMixIn.h */
#ifndef _AM_AUDIO_MIX_IN_H
#define _AM_AUDIO_MIX_IN_H

@ -24,6 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmB2ABSession.h */
#ifndef B2ABSession_H
#define B2ABSession_H
@ -53,6 +54,7 @@ struct B2ABEvent: public AmEvent
{}
};
/** \brief event fired if B leg is ringing in b2ab session */
struct B2ABOtherLegRingingEvent: public B2ABEvent
{
B2ABOtherLegRingingEvent()
@ -95,6 +97,7 @@ struct B2ABConnectLegEvent: public B2ABEvent
{}
};
/** \brief event fired if an exception occured while creating B leg */
struct B2ABConnectOtherLegExceptionEvent: public B2ABEvent {
unsigned int code;
@ -107,6 +110,7 @@ struct B2ABConnectOtherLegExceptionEvent: public B2ABEvent {
{}
};
/** \brief event fired if the B leg could not be connected (e.g. busy) */
struct B2ABConnectOtherLegFailedEvent: public B2ABEvent {
unsigned int code;

@ -24,7 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmB2BSession.h */
#ifndef AmB2BSession_h
#define AmB2BSession_h

@ -52,7 +52,7 @@ AmFileCache::~AmFileCache() {
}
}
int AmFileCache::load(const string& filename) {
int AmFileCache::load(const std::string& filename) {
int fd;
struct stat sbuf;

@ -24,7 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmCachedAudioFile.h */
#ifndef _AMFILECACHE_H
#define _AMFILECACHE_H
@ -33,6 +33,8 @@
#include <string>
/**
* \brief memory cache for AmAudioFile
*
* The AmFileCache class loads a file once into memory
* to be used e.g. by AmCachedAudioFile.
*/

@ -24,7 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmCallWatcher.h */
#ifndef _AM_CALL_WATCHER_H
#define _AM_CALL_WATCHER_H
@ -54,7 +54,7 @@ using std::pair;
class CallStatus;
/**
* event that carries out call status update
* \brief event that carries out call status update
*/
class CallStatusUpdateEvent : public AmEvent {
string call_id;
@ -82,7 +82,7 @@ class CallStatusUpdateEvent : public AmEvent {
};
/**
* interface for an update-able call status
* \brief interface for an update-able call status (AmCallWatcher)
*/
class CallStatus
{
@ -100,6 +100,7 @@ class CallStatus
class AmCallWatcherGarbageCollector;
/**
* \brief manages call status to be queried by external processes
* call watcher is an entity for managing call status
* via events that change status. Events are executed in a
* separate thread serially by processing the event queue,
@ -142,6 +143,8 @@ class AmCallWatcher
};
/**
* \brief garbage collector for the AmCallWatcher
*
* checks garbage every two seconds.
* A bit inefficient with two threads, but AmCallWatcher
* shouldn't be blocked by event.

@ -24,6 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmConferenceChannel.h */
#ifndef AmConferenceChannel_h
#define AmConferenceChannel_h

@ -24,7 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmConferenceStatus.h */
#ifndef _ConferenceStatus_h_
#define _ConferenceStatus_h_

@ -24,7 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmConfig.h */
#ifndef _AmConfig_h_
#define _AmConfig_h_

@ -24,6 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmConfigReader.h */
#ifndef AmConfigReader_h
#define AmConfigReader_h

@ -1,3 +1,4 @@
/** @file AmCtrlInterface.h */
#ifndef AmCtrlInterface_h
#define AmCtrlInterface_h

@ -383,7 +383,7 @@ static int IVR_dtmf_matrix[4][4] =
#define PI 3.1415926
#define NELEMSOF(x) (sizeof(x)/sizeof(*x))
/** \brief DTMF tone filter type */
typedef struct {
int freq; /* frequency */
int grp; /* low/high group */

@ -24,6 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmDtmfDetector.h */
#ifndef _AmDtmfDetector_h_
#define _AmDtmfDetector_h_
@ -102,7 +103,7 @@ class AmDtmfEvent : public AmEvent
int duration() const { return m_duration_msec; }
};
/**
* this is the Interface for a sink for KeyPresses.
* \brief Interface for a sink for KeyPresses.
*/
class AmKeyPressSink {
public:

@ -24,6 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmEvent.h */
#ifndef AmEvent_h
#define AmEvent_h

@ -24,6 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmEventQueue.h */
#ifndef _AMEVENTQUEUE_H_
#define _AMEVENTQUEUE_H_

@ -24,6 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmIcmpWatcher.h */
#ifndef _AmIcmpWatcher_h_
#define _AmIcmpWatcher_h_

@ -25,7 +25,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmInterfaceHandler.h */
#ifndef AmInterfaceHandler_h
#define AmInterfaceHandler_h

@ -24,7 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmJitterBuffer.h */
#ifndef _AmJitterBuffer_h_
#define _AmJitterBuffer_h_

@ -24,7 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmMail.h */
#ifndef _AmMail_h_
#define _AmMail_h_

@ -24,7 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmMediaProcessor.h */
#ifndef _AmMediaProcessor_h_
#define _AmMediaProcessor_h_

@ -24,7 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmMultiPartyMixer.h */
#ifndef _MultiPartyMixer_h_
#define _MultiPartyMixer_h_

@ -24,7 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmPlaylist.h */
#ifndef AmPlaylist_h
#define AmPlaylist_h
@ -99,6 +99,8 @@ public:
};
/**
* \brief playlistelement to notify session about the playlist progress
*
* null-playlist element which notifies session that this position in
* playlist is reached. It fies a AmPlaylistSeparatorEvent if it is
* read or written.

@ -24,7 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmPlayoutBuffer.h */
#ifndef _AmPlayoutBuffer_h_
#define _AmPlayoutBuffer_h_

@ -25,7 +25,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmPlugIn.h */
#ifndef _AmPlugIn_h_
#define _AmPlugIn_h_

@ -25,11 +25,10 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmPromptCollection.h */
#ifndef AM_PROMPT_COLLECTION_H
#define AM_PROMPT_COLLECTION_H
/**
*
* Example how to use:
@ -108,7 +107,7 @@ class AmPromptCollection {
};
/**
* AudioFile with filename
* \brief AmAudioFile with filename and open flag
*/
class AudioFileEntry : public AmAudioFile {

@ -24,7 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmRtpAudio.h */
#ifndef _AmRtpAudio_h_
#define _AmRtpAudio_h_

@ -24,6 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmRtpPacket.h */
#ifndef _AmRtpPacket_h_
#define _AmRtpPacket_h_

@ -24,7 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmRtpReceiver.h */
#ifndef _AmRtpReceiver_h_
#define _AmRtpReceiver_h_

@ -24,7 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmRtpStream.h */
#ifndef _RtpStream_h_
#define _RtpStream_h_
@ -243,6 +243,7 @@ public:
virtual unsigned int bytes2samples(unsigned int) const = 0;
};
/** \brief represents info about an \ref AmRtpStream */
struct AmRtpStreamInfo
{
@ -263,6 +264,7 @@ struct AmRtpStreamInfo
AmAudio* audio_rec = NULL);
};
/** \brief event fired on RTP timeout */
class AmRtpTimeoutEvent
: public AmEvent
{

@ -24,7 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmServer.h */
#ifndef _AmServer_h_
#define _AmServer_h_
@ -45,6 +45,7 @@ using std::greater;
class AmCtrlInterface;
class AmInterfaceHandler;
/** \brief binds a AmCtrlInterface and an AmInterfaceHandler*/
struct IfaceDesc
{
AmCtrlInterface* ctrl;

@ -119,7 +119,6 @@ bool AmSessionEventHandler::onSendReply(const AmSipRequest& req,
#endif
AmSession::AmSession()
: AmEventQueue(this), // AmDialogState(),
dlg(this),

@ -51,6 +51,8 @@ using std::pair;
class AmSessionFactory;
class AmDtmfEvent;
/** @file AmSession.h */
/* definition imported from Ser parser/msg_parser.h */
#define FL_FORCE_ACTIVE 2

@ -24,7 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmSessionContainer.h */
#ifndef AmSessionContainer_h
#define AmSessionContainer_h

@ -1,3 +1,30 @@
/*
* $Id$
*
* Copyright (C) 2002-2003 Fhg Fokus
*
* 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 ser 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
*/
/** @file AmSipDialog.h */
#ifndef AmSipDialog_h
#define AmSipDialog_h

@ -1,3 +1,30 @@
/*
* $Id$
*
* Copyright (C) 2002-2003 Fhg Fokus
*
* 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 ser 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
*/
/** @file AmSipEvent.h */
#ifndef AmSipEvent_h
#define AmSipEvent_h

@ -1,5 +1,32 @@
#ifndef _AmReply_h_
#define _AmReply_h_
/*
* $Id$
*
* Copyright (C) 2002-2003 Fhg Fokus
*
* 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 ser 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
*/
/** @file AmSipReply.h */
#ifndef _AmSipReply_h_
#define _AmSipReply_h_
#include "AmEventQueue.h"

@ -1,3 +1,30 @@
/*
* $Id$
*
* Copyright (C) 2002-2003 Fhg Fokus
*
* 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 ser 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
*/
/** @file AmSipRequest.h */
#ifndef AmSipRequest_h
#define AmSipRequest_h

@ -24,7 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmSmtpClient.h */
#ifndef _AmSmtpClient_h_
#define _AmSmtpClient_h_

@ -1,3 +1,30 @@
/*
* $Id$
*
* Copyright (C) 2002-2003 Fhg Fokus
*
* 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 ser 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
*/
/** @file AmStats.h */
#ifndef _AmStats_h_
#define _AmStats_h_

@ -24,7 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmThread.h */
#ifndef _AmThread_h_
#define _AmThread_h_

@ -24,7 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmUAC.h */
#ifndef AmUAC_H
#define AmUAC_H

@ -25,6 +25,8 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file AmUtils.cpp */
#include "AmUtils.h"
#include "AmThread.h"
#include "AmConfig.h"

@ -233,6 +233,7 @@ short get_port_v6(struct sockaddr_storage* ss);
*/
int create_unix_socket(const string& path);
/** \brief microseconds sleep using select */
#define sleep_us(nusecs) \
{ \
struct timeval tval; \
@ -247,12 +248,14 @@ int write_to_socket(int sd, const char* to_addr, const char * buf, unsigned int
string extract_tag(const string& addr);
// returns true if key is in s_list, a list of items delimited by list_delim
// skips whitespaces, too
/** returns true if key is in s_list, a list of items delimited by list_delim
*skips whitespaces, too */
bool key_in_list(const string& s_list, const string& key, char list_delim = ',');
// return string with trailing spaces and everything after ; including ; itself removed
/** return string with trailing spaces and everything after ; including ; itself removed */
string strip_header_params(const string& hdr_string);
// get a header parameter value
/** get a header parameter value */
string get_header_param(const string& hdr_string, const string& param_name);
/** get the value of key @param name from the list param_hdr*/
@ -261,14 +264,15 @@ string get_header_keyvalue(const string& param_hdr, const string& name);
/** get the value of key @param name from P-Iptel-Param header in hdrs */
string get_session_param(const string& hdrs, const string& name);
// support for thread-safe pseudo-random numbers
/** support for thread-safe pseudo-random numbers - init function */
void init_random();
/** support for thread-safe pseudo-random numbers - make a random number function */
unsigned int get_random();
// Explode string by a separator to a vector
/** Explode string by a separator to a vector */
std::vector <string> explode(string s, string e);
// add a directory to an environement variable
/** add a directory to an environement variable */
void add_env_path(const char* name, const string& path);
#endif

@ -31,8 +31,13 @@ deps: $(DEPS)
.PHONY: doc
doc:
rm -Rf doxygen_output; rm -rf ../doc/doxygen_doc ; \
doxygen doxygen_proj ; mv doxygen_output ../doc/doxygen_doc
rm -Rf doxygen_output; doxygen doxygen_proj ; \
rm -rf ../doc/doxygen_doc ; mv doxygen_output ../doc/doxygen_doc
.PHONY: fulldoc
fulldoc:
rm -Rf doxygen_output; doxygen doxygen_fulldoc ; \
rm -rf ../doc/doxygen_fulldoc ; mv doxygen_output ../doc/doxygen_fulldoc
include ../Makefile.defs

@ -77,9 +77,8 @@ extern "C" {
struct amci_codec_t;
/**
* File format declaration
* \brief File format declaration
*/
struct amci_file_desc_t {
/** subtype from current file format */
@ -96,7 +95,7 @@ struct amci_file_desc_t {
};
/**
* Sound converter function pointer.
* \brief Sound converter function pointer.
* @param out [out] output buffer
* @param in [in] input buffer
* @param size [in] size of input buffer
@ -120,7 +119,7 @@ typedef int (*amci_converter_t)( unsigned char* out,
);
/**
* Codec specific packet loss concealment function pointer.
* \brief Codec specific packet loss concealment function pointer.
* @param out [out] output buffer
* @param size [in] required size of output
* @param channels [in] number of channels
@ -140,7 +139,7 @@ typedef int (*amci_plc_t)( unsigned char* out,
long h_codec );
/**
* File format handler's open function
* \brief File format handler's open function
* @param fptr [in] fresh opened file pointer
* @param fmt_desc [out] file description
* @param options [in] options (see amci_inoutfmt_t)
@ -210,7 +209,8 @@ typedef int (*amci_file_mem_close_t)( unsigned char* mptr,
);
/**
* Codec's init function pointer.
* \brief Codec's init function pointer.
*
* @param format_parameters [in] parameters as passed by fmtp tag, 0 if none
* @param format_description [out] pointer to describing block, with amci_codec_fmt_info_t array; zero-terminated. 0 if none
* <table><tr><td><b>key</b></td><td><b>value</b></td></tr>
@ -230,23 +230,23 @@ typedef int (*amci_file_mem_close_t)( unsigned char* mptr,
typedef long (*amci_codec_init_t)(const char* format_parameters, amci_codec_fmt_info_t* format_description);
/**
* Codec's destroy function pointer.
* \brief Codec's destroy function pointer.
* @param h_codec Codec handle (from init function).
*/
typedef void (*amci_codec_destroy_t)(long h_codec);
/**
* Codec's function for calculating the number of samples from bytes
* \brief Codec's function for calculating the number of samples from bytes
*/
typedef unsigned int (*amci_codec_bytes2samples_t)(long h_codec, unsigned int num_bytes);
/**
* Codec's function for calculating the number of bytes from samples
* \brief Codec's function for calculating the number of bytes from samples
*/
typedef unsigned int (*amci_codec_samples2bytes_t)(long h_codec, unsigned int num_samples);
/**
* Codec description
* \brief Codec description
*/
struct amci_codec_t {
@ -276,7 +276,8 @@ struct amci_codec_t {
/** Function for calculating the number of samples from bytes. */
amci_codec_samples2bytes_t samples2bytes;
};
/** \brief supported subtypes for a file */
struct amci_subtype_t {
/** ex. 0x06 for Wav's Mu-Law */
@ -304,7 +305,7 @@ struct amci_subtype_t {
};
/**
* File format declaration.
* \brief File format declaration.
*/
struct amci_inoutfmt_t {
@ -340,7 +341,7 @@ struct amci_inoutfmt_t {
#define AMCI_PT_AUDIO_FRAME 1
/**
* Payload declaration
* \brief ayload declaration
*/
struct amci_payload_t {
@ -374,7 +375,7 @@ struct amci_payload_t {
/**
* Complete plug-in declaration.
* \brief Complete plug-in declaration.
*/
struct amci_exports_t {

@ -32,6 +32,7 @@
* @file codecs.h
* Centralized definition of all codec IDs.
* Look at the source file for declarations.
* they just need to be different from each other.
*/
#define CODEC_PCM16 0

@ -0,0 +1,227 @@
# Doxyfile 1.5.1
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
PROJECT_NAME = SEMS
PROJECT_NUMBER =
OUTPUT_DIRECTORY = doxygen_output
CREATE_SUBDIRS = NO
OUTPUT_LANGUAGE = English
USE_WINDOWS_ENCODING = NO
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ABBREVIATE_BRIEF =
ALWAYS_DETAILED_SEC = NO
INLINE_INHERITED_MEMB = NO
FULL_PATH_NAMES = NO
STRIP_FROM_PATH =
STRIP_FROM_INC_PATH =
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO
DETAILS_AT_TOP = NO
INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 8
ALIASES =
OPTIMIZE_OUTPUT_FOR_C = NO
OPTIMIZE_OUTPUT_JAVA = NO
BUILTIN_STL_SUPPORT = YES
DISTRIBUTE_GROUP_DOC = NO
SUBGROUPING = YES
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
EXTRACT_ALL = YES
EXTRACT_PRIVATE = YES
EXTRACT_STATIC = YES
EXTRACT_LOCAL_CLASSES = YES
EXTRACT_LOCAL_METHODS = NO
HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = NO
HIDE_FRIEND_COMPOUNDS = NO
HIDE_IN_BODY_DOCS = NO
INTERNAL_DOCS = NO
CASE_SENSE_NAMES = YES
HIDE_SCOPE_NAMES = NO
SHOW_INCLUDE_FILES = YES
INLINE_INFO = YES
SORT_MEMBER_DOCS = YES
SORT_BRIEF_DOCS = NO
SORT_BY_SCOPE_NAME = NO
GENERATE_TODOLIST = NO
GENERATE_TESTLIST = NO
GENERATE_BUGLIST = NO
GENERATE_DEPRECATEDLIST= NO
ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES
SHOW_DIRECTORIES = YES
FILE_VERSION_FILTER =
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
QUIET = NO
WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = YES
WARN_NO_PARAMDOC = NO
WARN_FORMAT = "$file:$line: $text"
WARN_LOGFILE =
#---------------------------------------------------------------------------
# configuration options related to the input files
#---------------------------------------------------------------------------
INPUT = ../core \
../apps \
../doc
FILE_PATTERNS =
RECURSIVE = YES
EXCLUDE =
EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS =
EXAMPLE_PATH = ../doc ../apps ../core
EXAMPLE_PATTERNS =
EXAMPLE_RECURSIVE = YES
IMAGE_PATH = ../doc/figures/png/
INPUT_FILTER =
FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER = YES
INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES
REFERENCES_LINK_SOURCE = YES
USE_HTAGS = NO
VERBATIM_HEADERS = YES
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = NO
COLS_IN_ALPHA_INDEX = 5
IGNORE_PREFIX =
#---------------------------------------------------------------------------
# configuration options related to the HTML output
#---------------------------------------------------------------------------
GENERATE_HTML = YES
HTML_OUTPUT = html
HTML_FILE_EXTENSION = .html
HTML_HEADER =
HTML_FOOTER =
HTML_STYLESHEET =
HTML_ALIGN_MEMBERS = YES
GENERATE_HTMLHELP = NO
CHM_FILE =
HHC_LOCATION =
GENERATE_CHI = NO
BINARY_TOC = NO
TOC_EXPAND = NO
DISABLE_INDEX = NO
ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = NO
TREEVIEW_WIDTH = 250
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------
GENERATE_LATEX = YES
LATEX_OUTPUT = latex
LATEX_CMD_NAME = latex
MAKEINDEX_CMD_NAME = makeindex
COMPACT_LATEX = NO
PAPER_TYPE = a4wide
EXTRA_PACKAGES =
LATEX_HEADER =
PDF_HYPERLINKS = NO
USE_PDFLATEX = NO
LATEX_BATCHMODE = NO
LATEX_HIDE_INDICES = NO
#---------------------------------------------------------------------------
# configuration options related to the RTF output
#---------------------------------------------------------------------------
GENERATE_RTF = NO
RTF_OUTPUT = rtf
COMPACT_RTF = NO
RTF_HYPERLINKS = NO
RTF_STYLESHEET_FILE =
RTF_EXTENSIONS_FILE =
#---------------------------------------------------------------------------
# configuration options related to the man page output
#---------------------------------------------------------------------------
GENERATE_MAN = NO
MAN_OUTPUT = man
MAN_EXTENSION = .3
MAN_LINKS = NO
#---------------------------------------------------------------------------
# configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML = NO
XML_OUTPUT = xml
XML_SCHEMA =
XML_DTD =
XML_PROGRAMLISTING = YES
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
# configuration options related to the Perl module output
#---------------------------------------------------------------------------
GENERATE_PERLMOD = NO
PERLMOD_LATEX = NO
PERLMOD_PRETTY = YES
PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = NO
EXPAND_ONLY_PREDEF = NO
SEARCH_INCLUDES = YES
INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
PREDEFINED =
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration::additions related to external references
#---------------------------------------------------------------------------
TAGFILES =
GENERATE_TAGFILE =
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = NO
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = YES
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
GROUP_GRAPHS = YES
UML_LOOK = NO
TEMPLATE_RELATIONS = YES
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
CALL_GRAPH = NO
CALLER_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
DOT_PATH =
DOTFILE_DIRS =
MAX_DOT_GRAPH_WIDTH = 1024
MAX_DOT_GRAPH_HEIGHT = 1024
MAX_DOT_GRAPH_DEPTH = 0
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES
DOT_CLEANUP = YES
#---------------------------------------------------------------------------
# Configuration::additions related to the search engine
#---------------------------------------------------------------------------
SEARCHENGINE = NO

@ -17,7 +17,7 @@
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
# by quotes) that should identify the project.
PROJECT_NAME = Sems
PROJECT_NAME = SEMS
# The PROJECT_NUMBER tag can be used to enter a project or revision number.
# This could be handy for archiving the generated documentation or
@ -450,27 +450,9 @@ WARN_LOGFILE =
# directories like "/usr/src/myproject". Separate the files or directories
# with spaces.
INPUT = amci etc lib plug-in rpm rtp scripts . \
plug-in/echo \
plug-in/gsm \
plug-in/ilbc \
plug-in/session_timer \
plug-in/stats \
plug-in/uac_auth \
plug-in/wav \
../apps/ann_b2b \
../apps/announce_transfer \
../apps/announcement \
../apps/conf_auth \
../apps/conference \
../apps/early_announce \
../apps/ivr \
../apps/py_sems \
../apps/mailbox \
../apps/mp3 \
../apps/voicemail \
../doc/doxyref.h
INPUT = ../core \
../apps \
../doc
# If the value of the INPUT tag contains directories, you can use the
# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
@ -485,13 +467,13 @@ FILE_PATTERNS =
# should be searched for input files as well. Possible values are YES and NO.
# If left blank NO is used.
RECURSIVE = NO
RECURSIVE = YES
# The EXCLUDE tag can be used to specify files and/or directories that should
# excluded from the INPUT source files. This way you can easily exclude a
# subdirectory from a directory tree whose root is specified with the INPUT tag.
EXCLUDE =
EXCLUDE = .svn
# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
# directories that are symbolic links (a Unix filesystem feature) are excluded
@ -509,30 +491,7 @@ EXCLUDE_PATTERNS =
# directories that contain example code fragments that are included (see
# the \include command).
EXAMPLE_PATH = ../doc ../ . ../apps/examples/announce_auth \
../apps/examples/di_dialer \
../apps/examples/mixin_announce \
../apps/examples/py_sems_ex \
../apps/examples/tutorial \
../apps/examples/cacheannounce \
../apps/examples/db_announce \
../apps/examples/di_log \
../apps/examples/jukecall \
../apps/examples/pinauthconference \
../apps/examples/simple_conference \
../apps/examples/xmlrpc2di/ \
../apps/examples/serviceline/ \
../apps/examples/tutorial/ \
../apps/examples/tutorial/annc_service \
../apps/examples/tutorial/cc_acc \
../apps/examples/tutorial/cc_acc_xmlrpc \
../apps/examples/tutorial/ivr_announce \
../apps/examples/tutorial/myannounceapp \
../apps/examples/tutorial/myapp \
../apps/examples/tutorial/mycc \
../apps/examples/tutorial/myconfigurableapp \
../apps/examples/tutorial/myjukebox
EXAMPLE_PATH = ../doc ../apps ../core
# If the value of the EXAMPLE_PATH tag contains directories, you can use the
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
@ -546,13 +505,13 @@ EXAMPLE_PATTERNS =
# commands irrespective of the value of the RECURSIVE tag.
# Possible values are YES and NO. If left blank NO is used.
EXAMPLE_RECURSIVE = NO
EXAMPLE_RECURSIVE = YES
# The IMAGE_PATH tag can be used to specify one or more files or
# directories that contain image that are included in the documentation (see
# the \image command).
IMAGE_PATH =
IMAGE_PATH = ../doc/figures/png
# The INPUT_FILTER tag can be used to specify a program that doxygen should
# invoke to filter for each input file. Doxygen will invoke the filter program

@ -28,12 +28,14 @@
#include "AmAudioEcho.h"
#include "log.h"
/** read audio from echo device*/
int AmAudioEcho::read(unsigned int user_ts, unsigned int size)
{
timed_buffer.get(user_ts,(ShortSample*)((unsigned char*)samples),size);
return size;
}
/** write audio to echo device */
int AmAudioEcho::write(unsigned int user_ts, unsigned int size)
{
timed_buffer.put(user_ts,(ShortSample*)((unsigned char*)samples),size);

@ -31,6 +31,7 @@
#include "AmAudio.h"
#include "SampleArray.h"
/** \brief audio device that echos audio from input to output */
class AmAudioEcho : public AmAudio
{
SampleArrayShort timed_buffer;

@ -34,7 +34,7 @@
#include <string>
using std::string;
/** \brief Factory for echo sessions */
class EchoFactory: public AmSessionFactory
{
AmSessionEventHandlerFactory* session_timer_f;
@ -45,6 +45,7 @@ public:
virtual AmSession* onInvite(const AmSipRequest& req);
};
/** \brief echo session logic implementation */
class EchoDialog : public AmSession
{
AmAudioEcho echo;

@ -40,7 +40,7 @@ class AmTimeoutEvent;
#define ID_SESSION_INTERVAL_TIMER -1
#define ID_SESSION_REFRESH_TIMER -2
/** \brief Factory of the session timer event handler */
class SessionTimerFactory: public AmSessionEventHandlerFactory
{
bool checkSessionExpires(const AmSipRequest& req);
@ -55,6 +55,7 @@ class SessionTimerFactory: public AmSessionEventHandlerFactory
AmSessionEventHandler* getHandler(AmSession* s);
};
/** \brief SessionEventHandler for implementing session timer logic for a session */
class SessionTimer: public AmSessionEventHandler
{
AmSession* s;

@ -6,6 +6,7 @@
#define SESSION_TIMER_GRANULARITY 100 // check every 100 millisec
/** \brief component for providing user_timer DI interface */
class UserTimerFactory: public AmDynInvokeFactory
{
public:

@ -24,7 +24,7 @@
#define TIMEOUTEVENT_NAME "timer_timeout"
/**
* Timer Event: class
* \brief User Timer Event
* data[0]: int timer_id
*/
class AmTimeoutEvent : public AmPluginEvent
@ -34,7 +34,7 @@ class AmTimeoutEvent : public AmPluginEvent
};
/**
* Timer struct containing the alarm time.
* \brief Timer struct containing the alarm time.
*/
struct AmTimer
{
@ -53,7 +53,8 @@ bool operator < (const AmTimer& l, const AmTimer& r);
bool operator == (const AmTimer& l, const AmTimer& r);
/**
* session timer class.
* \brief user timer class.
*
* Implements a timer with session granularity.
* On timeout an AmTimeoutEvent with the ID is posted.
*/
@ -96,6 +97,7 @@ class UserTimer: public AmDynInvoke
void on_stop();
#endif
/** DI API */
void invoke(const string& method, const AmArg& args, AmArg& ret);
};

@ -40,7 +40,7 @@ using std::string;
EXPORT_SESSION_FACTORY(StatsFactory,MOD_NAME);
StatsFactory::StatsFactory(const string& _app_name)
StatsFactory::StatsFactory(const std::string& _app_name)
: AmSessionFactory(_app_name)
{
}

@ -35,6 +35,7 @@
class AmSessionContainer;
/** \brief starts the stats UDP server */
class StatsFactory: public AmSessionFactory,
public AmInterfaceHandler
{

@ -38,6 +38,7 @@ using std::string;
class AmSessionContainer;
/** \brief UDP server running to provide statistics via simple UDP queries */
class StatsUDPServer: public AmThread
{
static StatsUDPServer* _instance;

@ -220,7 +220,7 @@ void w_MD5Update(MD5_CTX *ctx, const string& s) {
}
string UACAuth::find_attribute(const string& name, const string& header) {
string UACAuth::find_attribute(const std::string& name, const std::string& header) {
string res;
size_t pos1 = header.find(name);
if (pos1!=string::npos) {
@ -236,7 +236,7 @@ string UACAuth::find_attribute(const string& name, const string& header) {
return res;
}
bool UACAuth::parse_header(const string& auth_hdr, UACAuthDigestChallenge& challenge) {
bool UACAuth::parse_header(const std::string& auth_hdr, UACAuthDigestChallenge& challenge) {
size_t p = auth_hdr.find_first_not_of(' ');
if (auth_hdr.substr(p, 6) != "Digest") {
ERROR("only Digest auth supported\n");
@ -338,7 +338,7 @@ static inline void cvt_hex(HASH bin, HASHHEX hex)
* calculate H(A1)
*/
void UACAuth::uac_calc_HA1(UACAuthDigestChallenge& challenge,
string cnonce,
std::string cnonce,
HASHHEX sess_key)
{
MD5_CTX Md5Ctx;
@ -371,7 +371,7 @@ void UACAuth::uac_calc_HA1(UACAuthDigestChallenge& challenge,
/*
* calculate H(A2)
*/
void UACAuth::uac_calc_HA2( const string& method, const string& uri,
void UACAuth::uac_calc_HA2( const std::string& method, const std::string& uri,
UACAuthDigestChallenge& challenge,
HASHHEX hentity,
HASHHEX HA2Hex )
@ -402,7 +402,7 @@ void UACAuth::uac_calc_HA2( const string& method, const string& uri,
*/
void UACAuth::uac_calc_response( HASHHEX ha1, HASHHEX ha2,
UACAuthDigestChallenge& challenge,
const string& nc, const string& cnonce,
const std::string& nc, const std::string& cnonce,
HASHHEX response)
{
unsigned char hc[1]; hc[0]=':';

@ -43,6 +43,7 @@ typedef unsigned char HASH[HASHLEN];
#define HASHHEXLEN 32
typedef unsigned char HASHHEX[HASHHEXLEN+1];
/** \brief Challenge in uac auth */
struct UACAuthDigestChallenge {
std::string realm;
std::string qop;
@ -53,6 +54,7 @@ struct UACAuthDigestChallenge {
std::string algorithm;
};
/** \brief factory for uac_auth session event handlers */
class UACAuthFactory
: public AmSessionEventHandlerFactory,
public AmDynInvokeFactory,
@ -78,6 +80,7 @@ class UACAuthFactory
void invoke(const string& method, const AmArg& args, AmArg& ret);
};
/** \brief contains necessary information for UAC auth of a SIP request */
struct SIPRequestInfo {
string method;
string content_type;
@ -95,6 +98,7 @@ struct SIPRequestInfo {
};
/** \brief SessionEventHandler for implementing uac authentication */
class UACAuth : public AmSessionEventHandler
{
map<unsigned int, SIPRequestInfo> sent_requests;

@ -35,8 +35,10 @@
sr = fread(buf,s,1,fp);\
if((sr != 1) || ferror(fp)) return -1;
/* The file header of RIFF-WAVE files (*.wav). Files are always in
little-endian byte-order. */
/** \brief The file header of RIFF-WAVE files (*.wav).
* Files are always in
* little-endian byte-order.
*/
struct wav_header
{

@ -45,8 +45,8 @@ typedef unsigned int u_int32;
*/
#define RTP_VERSION 2
/*
* RTP data header
/**
* \brief RTP data header type
*/
typedef struct {
@ -70,6 +70,7 @@ typedef struct {
u_int32 ssrc; /* synchronization source */
} rtp_hdr_t;
/** \brief RTP extension header type */
typedef struct {
u_int16 profile; /* xhdr type */
u_int16 len; /* xhdr length */

@ -24,7 +24,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/** @file sems.h */
#ifndef _ans_machine_h_
#define _ans_machine_h_

@ -1,4 +1,50 @@
Changelog for SEMS (from 0.10.0 rc1)
Changelog for SEMS
Version 0.10.0 (final)
- new module for exposing internal DI APIs via XMLRPC
- new module for triggering calls via DI interface
- new DI/XMLRPC controlled conference application, that can for example
be used for conference rooms with web interface
- CallWatcher and a more powerful dialout function simplifies
interfacing to external applications
- many examples for quick start of custom service development,
for example new serviceline application
- b2bua implementation with media relay
- language awareness of conference application
- DB support for conference and voicemail prompts, and announcements
- PromptCollection simplifies usage of prompts in applications
- b2bua support in py_sems embedded python interpreter
- corrected RTP timeout detection
- new api for custom logging modules, new in-memory ring buffer
logging module
- accept all possible payloads and payload switching on the fly
(thanks to Maxim Sobolyev/sippysoft)
- changing callgroups (media processing threads) in running sessions
- support for setting sessions on hold
- support for OpenSer 1.3
- substantially improved documentation
- 'bundle' install method for easy installation
... and many bugfixes
Version 0.10.0 rc2
- new Adaptive jitter buffer as alternative playout method
Contributed by Andriy Pylypenko/Sippy Software
@ -16,6 +62,9 @@ Changelog for SEMS (from 0.10.0 rc1)
- new pre call announcement method using REFER
- new plug-in py_sems using a Python/C++ binding generator for even more power
in python scripts
- stats server can be used for monitoring custom modules/applications
- session specific parameters by default taken from unified
@ -33,3 +82,5 @@ Changelog for SEMS (from 0.10.0 rc1)
- ...and a lot of other bug fixes
Version 0.10.0 rc1
...

@ -17,6 +17,44 @@ variables.
accepts SERPREFIX variable (default /opt/ser-sems), which should be the
installation path of the used ser-sems.
$ make tar
make a source tarball (.tar.gz)
$ make bundle
make a source tarball bundle (.tar.gz), a combination of SEMS and SER
for SEMS.
$ make doc
make doxygen documentation (output in doc/doxygen_doc)
$ make fulldoc
make doxygen documentation (output in doc/doxygen_doc) will full
xreff'd source
Defines and Variables
---------------------
+-------------+-------------+---------------------------------------+
| Variable | Default | Comment |
+-------------+-------------+---------------------------------------+
GPP g++ C++ compiler
GCC gcc C compiler
INSTALL install
TAR tar
CXX_FLAGS ... C++ compiler
C_FLAGS ... C compiler
BASEDIR <empty> destination base
DESTDIR/PREFIX /usr/local destination prefix
(installs to /basedir/prefix)
PYTHON_VERSION 2.4 ivr and py_sems modules
TTS n flite tts in ivr and py_sems modules
(y or n)
USE_MYSQL not set use anouncements from mysql db
in conference and voicemail apps
IVR

@ -1,2 +1,8 @@
.PHONY: doc
doc:
make -C ../core doc
.PHONY: fulldoc
fulldoc:
make -C ../core/ fulldoc

@ -51,7 +51,7 @@
*
*/
/*! \page Compiling Additional compiling instructions (ivr and mp3)
/*! \page Compiling Compilation instructions
* \verbinclude COMPILING
*
*/
@ -83,7 +83,7 @@
* can be found in the apps/ directory and are installed by default if they do not
* depend on special libraries (eg. liblame).
* A set of \ref AppDocExample that illustrate how to
* make use certain aspects of the SEMS framework rather than can be found in the
* make use certain aspects of the SEMS framework can be found in the
* apps/examples directory. These are not installed by default.
*
* \section announcementappdoc Announcement Applications

Loading…
Cancel
Save