Files
mattf e5caeca898 cleanup of extras
git-svn-id: svn://192.168.202.10@17 3d104415-ff17-0410-8863-d5cf3c621b8a
2006-07-07 15:44:57 +00:00

213 lines
5.2 KiB
C

// $Id: member.h,v 1.7 2005/11/02 22:42:42 stevek Exp $
/*
* app_conference
*
* A channel independent conference application for Asterisk
*
* Copyright (C) 2002, 2003 Junghanns.NET GmbH
* Copyright (C) 2003-2005 HorizonLive.com, Inc.
*
* Klaus-Peter Junghanns <kapejod@ns1.jnetdns.de>
* Steve Kann <stevek@stevek.com>
*
* This program may be modified and distributed under the
* terms of the GNU Public License.
*
*/
#ifndef _APP_CONF_MEMBER_H
#define _APP_CONF_MEMBER_H
//
// includes
//
#include "app_conference.h"
#include "common.h"
#include "asterisk/app.h"
//
// struct declarations
//
struct ast_conf_soundq
{
char name[256];
struct ast_filestream *stream; // the stream
int muted; // should incoming audio be muted while we play?
struct ast_conf_soundq *next;
};
struct ast_conf_member
{
ast_mutex_t lock ; // member data mutex
struct ast_channel* chan ; // member's channel
char* channel_name ; // member's channel name
// values passed to create_member () via *data
int priority ; // highest priority gets the channel
char* flags ; // raw member-type flags
char type ; // L = ListenOnly, M = Moderator, S = Standard (Listen/Talk)
char* id ; // member id
// determine by flags and channel name
char connection_type ; // T = telephone, X = iaxclient, S = sip
// vad voice probability thresholds
float vad_prob_start ;
float vad_prob_continue ;
// ready flag
short ready_for_outgoing ;
// input frame queue
conf_frame* inFrames ;
conf_frame* inFramesTail ;
unsigned int inFramesCount ;
// input/output smoother
struct ast_smoother *inSmoother;
struct ast_packer *outPacker;
int smooth_size_in;
int smooth_size_out;
int smooth_multiple;
// frames needed by conference_exec
unsigned int inFramesNeeded ;
// used when caching last frame
conf_frame* inFramesLast ;
unsigned int inFramesRepeatLast ;
unsigned short okayToCacheLast ;
// output frame queue
conf_frame* outFrames ;
conf_frame* outFramesTail ;
unsigned int outFramesCount ;
// time we last dropped a frame
struct timeval last_in_dropped ;
struct timeval last_out_dropped ;
// ( not currently used )
// int samplesperframe ;
// used for determining need to mix frames
// and for management interface notification
short speaking_state_prev ;
short speaking_state_notify ;
short speaking_state ;
// pointer to next member in single-linked list
struct ast_conf_member* next ;
// accounting values
unsigned long frames_in ;
unsigned long frames_in_dropped ;
unsigned long frames_out ;
unsigned long frames_out_dropped ;
// for counting sequentially dropped frames
unsigned int sequential_drops ;
unsigned long since_dropped ;
// start time
struct timeval time_entered ;
struct timeval lastsent_timeval ;
// flag indicating we should remove this member
short remove_flag ;
#if ( SILDET == 2 )
// pointer to speex preprocessor dsp
SpeexPreprocessState *dsp ;
// number of frames to ignore speex_preprocess()
int ignore_speex_count;
#else
// placeholder when preprocessing is not enabled
void* dsp ;
#endif
// audio format this member is using
int write_format ;
int read_format ;
int write_format_index ;
int read_format_index ;
// member frame translators
struct ast_trans_pvt* to_slinear ;
struct ast_trans_pvt* from_slinear ;
// For playing sounds
struct ast_conf_soundq *soundq;
#ifdef DEBUG_OUTPUT_PCM
FILE *incoming_fh;
#endif
int send_dtmf:1;
int quiet_entry_exit:1;
int inband_dtmf:1;
int rfc_dtmf:1;
} ;
struct conf_member
{
struct ast_conf_member* realmember ;
struct conf_member* next ;
} ;
//
// function declarations
//
int member_exec( struct ast_channel* chan, void* data ) ;
int basic_play_sound ( char *channel, char *file ) ;
struct ast_conf_member* create_member( struct ast_channel* chan, const char* data ) ;
struct ast_conf_member* delete_member( struct ast_conf_member* member ) ;
// incoming queue
int queue_incoming_frame( struct ast_conf_member* member, struct ast_frame* fr ) ;
conf_frame* get_incoming_frame( struct ast_conf_member* member ) ;
// outgoing queue
int queue_outgoing_frame( struct ast_conf_member* member, const struct ast_frame* fr, struct timeval delivery ) ;
int __queue_outgoing_frame( struct ast_conf_member* member, const struct ast_frame* fr, struct timeval delivery ) ;
conf_frame* get_outgoing_frame( struct ast_conf_member* member ) ;
void send_state_change_notifications( struct ast_conf_member* member ) ;
//
// meta-info accessors functions
//
short memberIsPhoneClient( struct ast_conf_member* member ) ;
short memberIsIaxClient( struct ast_conf_member* member ) ;
short memberIsSIPClient( struct ast_conf_member* member ) ;
short memberIsModerator( struct ast_conf_member* member ) ;
short memberIsListener( struct ast_conf_member* member ) ;
//
// packer functions
//
struct ast_packer;
extern struct ast_packer *ast_packer_new(int bytes);
extern void ast_packer_set_flags(struct ast_packer *packer, int flags);
extern int ast_packer_get_flags(struct ast_packer *packer);
extern void ast_packer_free(struct ast_packer *s);
extern void ast_packer_reset(struct ast_packer *s, int bytes);
extern int ast_packer_feed(struct ast_packer *s, const struct ast_frame *f);
extern struct ast_frame *ast_packer_read(struct ast_packer *s);
#endif