File: phone.h

package info (click to toggle)
libccrtp 2.0.9-4.1
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 4,472 kB
  • sloc: sh: 10,900; cpp: 9,590; ansic: 2,567; makefile: 134
file content (218 lines) | stat: -rw-r--r-- 5,137 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
// 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