blob: 960af2f1d3864d902b5b9f6db72264c2ac64c587 [file] [log] [blame]
// Copyright (C) 2000-2005 Open Source Telecom Corporation.
// Copyright (C) 2006-2008 David Sugar, Tycho Softworks.
//
// This program 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.
//
// This program 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 CCXX_PHONE_H_
#define CCXX_PHONE_H_
#ifndef CCXX_RTP_H_
#include <ccrtp/rtp.h>
#endif
#ifdef CCXX_NAMESPACES
namespace ost {
#endif
/**
* Load /etc/phone.conf [thread] key value pairs. Has internal defaults
* if section or file is missing.
*
* @author David Sugar <dyfet@ostel.com>
* @short Load keythreads priority and session count configuration.
*/
class KeyRTP : public Keydata
{
public:
/**
* Initialize keythread data.
*/
KeyRTP();
/**
* Get unicast address.
*/
inline InetHostAddress getInterface(void)
{return InetHostAddress(getLast("interface"));};
/**
* Get binding port number.
*/
inline tpport_t getPort(void)
{return (tpport_t) atoi(getLast("port"));};
/**
* Get stack timer.
*/
inline microtimeout_t getTimer(void)
{return (microtimeout_t)atol(getLast("timer")) * 1000l;};
/**
* Get packet expiration timer.
*/
inline microtimeout_t getExpire(void)
{return (microtimeout_t)atol(getLast("expire")) * 1000l;};
};
/**
* Load /etc/phone.conf [audio] key value pairs. Has internal defaults
* if section or file is missing.
*
* @author David Sugar <dyfet@ostel.com>
* @short Load keythreads priority and session count configuration.
*/
class KeyAudio : public Keydata
{
public:
/**
* Initialize keythread data.
*/
KeyAudio();
};
/**
* Load /etc/phone.conf [thread] key value pairs. Has internal defaults
* if section or file is missing.
*
* @author David Sugar <dyfet@ostel.com>
* @short Load keythreads priority and session count configuration.
*/
class KeyThreads : public Keydata
{
public:
/**
* Initialize keythread data.
*/
KeyThreads();
/**
* Get relative priority to run service threads at.
*
* @return audio thread priority (relative).
*/
inline int priAudio(void)
{return atoi(getLast("audio"));};
/**
* Get relative priority for the rtp stack.
*
* @return audio thread priority (relative).
*/
inline int priRTP(void)
{return atoi(getLast("rtp"));};
/**
* Get relative process priority.
*
* @return rtp stack thread priority (relative).
*/
inline int getPriority(void)
{return atoi(getLast("priority"));};
/**
* Get thread stack frame size.
*
* @return thread stack frame in k.
*/
inline unsigned getStack(void)
{return atoi(getLast("stack"));};
/**
* Get scheduler policy to use.
*
* @return scheduler policy.
*/
inline const char *getPolicy(void)
{return getLast("priority");};
};
/**
* Process RTP Events for plugins and special purpose classes.
*
* @author David Sugar <dyfet@ostel.com>
* @short RTP event processing.
*/
class RTPEvent
{
private:
friend class RTPAudio;
static RTPEvent *first;
RTPEvent *next;
protected:
RTPEvent();
virtual void gotHello(const SyncSource &src)
{return;};
virtual void gotGoodbye(const SyncSource &src,
const std::string& reason)
{return;};
};
/**
* This is the base session stack that will maintain all network audio
* activity.
*
* @author David Sugar <dyfet@ostel.com>
* @short RTP stack for network audio.
*/
class RTPAudio : public RTPSocket
{
private:
unsigned groups; // multicast groups joined
bool unicast; // indicate if in unicast call
bool shutdown; // tracks shutdown state
void onGotHello(const SyncSource &src);
void onGotGoodbye(const SyncSource &src, const std::string& reason);
public:
RTPAudio();
void exit(const char *reason);
};
/**
* This is the base interface for DSO loadable audio devices.
*
* @author David Sugar <dyfet@ostel.com>
* @short base class for Audio devices.
*/
class DevAudio
{
protected:
DevAudio();
public:
virtual void open(void) = 0; // open device channel
virtual void close(void) = 0; // close device channel
};
extern bool multicast;
extern bool daemon;
extern KeyThreads keythreads;
extern KeyRTP keyrtp;
extern KeyAudio keyaudio;
extern RTPAudio *rtp;
extern DevAudio *audio;
#ifdef CCXX_NAMESPACES
}
#endif
#endif