Bayonne
Public Member Functions | Protected Member Functions | Protected Attributes
ost::BayonneMsgport Class Reference

Bayonne Msgports are used to queue and post session events which normally have to be passed through another thread context. More...

#include <bayonne.h>

Inheritance diagram for ost::BayonneMsgport:
ost::Bayonne

List of all members.

Public Member Functions

virtual ~BayonneMsgport ()
 Destroy a msgport.
 BayonneMsgport (BayonneDriver *driver)
 Create a message port and optionally bind it to a given driver.
void update (void)
 Request retiming.
void initial (void)
 Initialize msgport, determine which sessions it will perform timing for based on the driver it is bound to.
- Public Member Functions inherited from ost::Bayonne
void md5_hash (char *out, const char *source)
 Compute md5 hashes...

Protected Member Functions

void shutdown (void)
 Send shutdown event to the msgport.
virtual timeout_t getTimeout (Event *event)
 Determine sleep time to schedule for waiting, unless an update occurs to force rescheduling.
void run (void)
size_t onWait (void *buf)
size_t onPost (void *buf)
size_t onPeek (void *buf)

Protected Attributes

BayonneDrivermsgdriver
Event * msglist
unsigned msgsize
unsigned msghead
unsigned msgtail
timeslot_t tsfirst
timeslot_t tscount
char msgname [16]

Additional Inherited Members

- Public Types inherited from ost::Bayonne
enum  interface_t {
  IF_PSTN, IF_SPAN, IF_ISDN, IF_SS7,
  IF_INET, IF_NONE, IF_POTS = IF_PSTN
}
 Telephony endpoint interface identifiers. More...
enum  calltype_t {
  NONE, INCOMING, OUTGOING, PICKUP,
  FORWARDED, RECALL, DIRECT, RINGING,
  VIRTUAL
}
 Type of call session being processed. More...
enum  bridge_t {
  BR_TDM, BR_INET, BR_SOFT, BR_GATE,
  BR_NONE
}
 Type of bridge used for joining ports. More...
enum  state_t {
  STATE_INITIAL = 0, STATE_IDLE, STATE_RESET, STATE_RELEASE,
  STATE_BUSY, STATE_DOWN, STATE_RING, STATE_PICKUP,
  STATE_SEIZE, STATE_ANSWER, STATE_STEP, STATE_EXEC,
  STATE_THREAD, STATE_CLEAR, STATE_INKEY, STATE_INPUT,
  STATE_READ, STATE_COLLECT, STATE_DIAL, STATE_XFER,
  STATE_REFER, STATE_HOLD, STATE_RECALL, STATE_TONE,
  STATE_DTMF, STATE_PLAY, STATE_RECORD, STATE_JOIN,
  STATE_WAIT, STATE_CALLING, STATE_CONNECT, STATE_RECONNECT,
  STATE_HUNTING, STATE_SLEEP, STATE_START, STATE_HANGUP,
  STATE_LIBRESET, STATE_WAITKEY, STATE_LIBWAIT, STATE_IRESET,
  STATE_FINAL, STATE_SUSPEND = STATE_DOWN, STATE_STANDBY = STATE_DOWN, STATE_LIBEXEC = STATE_EXEC,
  STATE_RINGING = STATE_RING, STATE_RUNNING = STATE_STEP, STATE_THREADING = STATE_THREAD
}
 Call processing states offered in core library. More...
enum  signal_t {
  SIGNAL_EXIT = 0, SIGNAL_ERROR, SIGNAL_TIMEOUT, SIGNAL_DTMF,
  SIGNAL_0, SIGNAL_1, SIGNAL_2, SIGNAL_3,
  SIGNAL_4, SIGNAL_5, SIGNAL_6, SIGNAL_7,
  SIGNAL_8, SIGNAL_9, SIGNAL_STAR, SIGNAL_POUND,
  SIGNAL_A, SIGNAL_OVERRIDE = SIGNAL_A, SIGNAL_B, SIGNAL_FLASH = SIGNAL_B,
  SIGNAL_C, SIGNAL_IMMEDIATE = SIGNAL_C, SIGNAL_D, SIGNAL_PRIORITY = SIGNAL_D,
  SIGNAL_RING, SIGNAL_TONE, SIGNAL_EVENT, SIGNAL_WINK,
  SIGNAL_CHILD, SIGNAL_FAIL, SIGNAL_PICKUP, SIGNAL_PART,
  SIGNAL_INVALID, SIGNAL_PARENT, SIGNAL_WAIT, SIGNAL_HANGUP = SIGNAL_EXIT
}
 Signaled interpreter events. More...
enum  event_t {
  MSGPORT_WAKEUP = 0, MSGPORT_SHUTDOWN, MSGPORT_LOGGING, MSGPORT_REGISTER,
  ENTER_STATE = 100, EXIT_STATE, EXIT_THREAD, EXIT_TIMER,
  EXIT_PARTING, NULL_EVENT, ERROR_STATE, ENTER_HUNTING,
  EXIT_HUNTING, ENTER_RECONNECT, EXIT_RECONNECT, RECALL_RECONNECT,
  EXIT_SCRIPT, STEP_SCRIPT, START_DIRECT = 200, START_INCOMING,
  START_OUTGOING, START_RECALL, START_FORWARDED, START_RINGING,
  START_HUNTING, START_REFER, STOP_SCRIPT, STOP_DISCONNECT,
  STOP_PARENT, CANCEL_CHILD, DETACH_CHILD, CHILD_RUNNING,
  CHILD_FAILED, CHILD_INVALID, CHILD_EXPIRED, CHILD_BUSY,
  CHILD_FAX, CHILD_DND, CHILD_AWAY, CHILD_NOCODEC,
  CHILD_OFFLINE, START_SCRIPT = START_INCOMING, START_SELECTED = START_OUTGOING, START_TRANSFER = START_REFER,
  ENTER_LIBEXEC = 300, EXIT_LIBEXEC, HEAD_LIBEXEC, ARGS_LIBEXEC,
  GOT_LIBEXEC, READ_LIBEXEC, DROP_LIBEXEC, STAT_LIBEXEC,
  PROMPT_LIBEXEC, CLEAR_LIBEXEC, WAIT_LIBEXEC, RECORD_LIBEXEC,
  REPLAY_LIBEXEC, RESTART_LIBEXEC, TONE_LIBEXEC, XFER_LIBEXEC,
  POST_LIBEXEC, ERROR_LIBEXEC, TIMER_EXPIRED = 400, LINE_WINK,
  LINE_PICKUP, LINE_HANGUP, LINE_DISCONNECT, LINE_ON_HOOK,
  LINE_OFF_HOOK, RING_ON, RING_OFF, RING_STOP,
  LINE_CALLER_ID, RINGING_DID, DEVICE_BLOCKED, DEVICE_UNBLOCKED,
  DEVICE_OPEN, DEVICE_CLOSE, DSP_READY, RING_SYNC,
  CALL_DETECT = 500, CALL_CONNECTED, CALL_RELEASED, CALL_ACCEPTED,
  CALL_ANSWERED, CALL_HOLD, CALL_HOLDING = CALL_HOLD, CALL_NOHOLD,
  CALL_DIGITS, CALL_OFFERED, CALL_ANI, CALL_ACTIVE,
  CALL_NOACTIVE, CALL_BILLING, CALL_RESTART, CALL_SETSTATE,
  CALL_FAILURE, CALL_ALERTING, CALL_INFO, CALL_BUSY,
  CALL_DIVERT, CALL_FACILITY, CALL_FRAME, CALL_NOTIFY,
  CALL_NSI, CALL_RINGING, CALL_DISCONNECT, CALL_CLEARED,
  CALL_PROCEEDING, RESTART_FAILED, RELEASE_FAILED, START_RING = 600,
  STOP_RING, CLEAR_TIMESLOT, START_FLASH, STOP_FLASH,
  DIAL_CONNECT, DIAL_TIMEOUT, DIAL_FAILED, DIAL_INVALID,
  DIAL_BUSY, DIAL_FAX, DIAL_PAM, DIAL_DND,
  DIAL_AWAY, DIAL_OFFLINE, DIAL_NOCODEC, DIAL_MACHINE = DIAL_PAM,
  AUDIO_IDLE = 700, AUDIO_ACTIVE, AUDIO_EXPIRED, INPUT_PENDING,
  OUTPUT_PENDING, AUDIO_BUFFER, TONE_IDLE, DTMF_KEYDOWN,
  DTMF_KEYSYNC, DTMF_KEYUP, TONE_START, TONE_STOP,
  AUDIO_START, AUDIO_STOP, DTMF_GENDOWN, DTMF_GENUP,
  AUDIO_SYNC, AUDIO_RECONNECT, AUDIO_DISCONNECT, PEER_RECONNECT,
  PEER_DISCONNECT, PEER_REFER, DTMF_GENTONE = DTMF_GENUP, MAKE_TEST = 800,
  MAKE_BUSY, MAKE_IDLE, MAKE_DOWN, MAKE_UP,
  MAKE_EXPIRED, ENABLE_LOGGING, DISABLE_LOGGING, PART_EXPIRED,
  PART_EXITING, PART_DISCONNECT, JOIN_PEER, PEER_WAITING,
  RELOCATE_REQUEST, RELOCATE_ACCEPT, RELOCATE_REJECT, START_RELOCATE,
  STREAM_ACTIVE, STREAM_PASSIVE, JOIN_RECALL, DROP_RECALL,
  DROP_REFER, ENTER_RESUME = MAKE_UP, ENTER_SUSPEND = MAKE_DOWN, SYSTEM_DOWN = 900,
  DRIVER_SPECIFIC = 1000
}
 Primary event identifiers. More...
enum  result_t {
  RESULT_SUCCESS = 0, RESULT_TIMEOUT, RESULT_INVALID, RESULT_PENDING,
  RESULT_COMPLETE, RESULT_FAILED, RESULT_BADPATH = 254, RESULT_OFFLINE = 255
}
typedef uint16_t timeslot_t
typedef int32_t rpcint_t
typedef rpcint_t rpcbool_t
typedef void(* rpcmethod_t )(BayonneRPC *rpc)
 A rpc method handler.
typedef bool(BayonneSession::* Handler )(Event *event)
 The current state handler in effect for a given channel to receive events.
- Static Public Member Functions inherited from ost::Bayonne
static void snmptrap (unsigned id, const char *descr=NULL)
static void allocate (timeslot_t timeslots, ScriptCommand *pointer=NULL, timeslot_t overdraft=0)
 Allocates the maximum number of timeslots the server will use as a whole and attaches a given server to the library.
static const char * getRegistryId (const char *id)
static BayonneDrivergetDriverTag (const char *id)
static Audio::Encoding getEncoding (const char *cp)
static void allocateLocal (void)
 Allocate local script engine sessions, if needed.
static void addConfig (const char *cfgfile)
 Add config file entry.
static void waitLoaded (void)
 Wait for live flag...
static unsigned long uptime (void)
 Get server uptime.
static ScriptCompiler * reload (void)
 Request active scripts to be recompiled from the library.
static void down (void)
 Used to down the server from the library.
static bool service (const char *service)
 Sets server service level from the library.
static const char * getRunLevel (void)
 Get service level.
static BayonneSessiongetSession (timeslot_t timeslot)
 Returns a session pointer for a server timeslot.
static ScriptImage ** getLocalImage (timeslot_t timeslot)
 Returns a local image pointer for a server timeslot.
static BayonneSessionstartDialing (const char *dial, const char *name, const char *caller, const char *display, BayonneSession *parent=NULL, const char *manager=NULL, const char *secret=NULL)
 Start a dialing session.
static BayonneSessiongetSid (const char *id)
 Returns a session pointer for a string identifier.
static timeslot_t toTimeslot (const char *id)
 Returns a server timeslot number for a string identifier.
static timeslot_t getTimeslotsUsed (void)
 Return total library timeslots used (highest used).
static timeslot_t getTimeslotCount (void)
 Return total timeslots allocated for the server.
static timeslot_t getAvailTimeslots (void)
 Return remaining timeslots available to allocate driver ports into.
static Handler getState (const char *name)
 Map a state name into a handler.
static int getDigit (char dtmf)
 Convert a dtmf character into a 0-15 number reference.
static char getChar (int dtmf)
 Convert a dtmf digit number into it's ascii code.
static bool matchDigits (const char *digits, const char *match, bool partial=false)
 A function to support pattern matching and templates for digit strings.
static ScriptImage * useImage (void)
 Use the current compiled script image; mark as in use.
static void endImage (ScriptImage *image)
 Release a script image in use.
static bool loadPlugin (const char *path)
 Load a plugin module.
static bool loadMonitor (const char *path)
 Load a monitoring/management module.
static bool loadAudio (const char *path)
 Load a bgm/audio processing module for continues audio.
static void errlog (const char *level, const char *fmt,...)
static bool getUserdata (void)
static void addTrap4 (const char *addr)
- Static Public Attributes inherited from ost::Bayonne
static char dtmf_keymap [256]
static timeout_t step_timer
static timeout_t reset_timer
static timeout_t exec_timer
static unsigned compile_count
static volatile bool image_loaded
static BayonneTranslatorinit_translator
static const char * init_voicelib
static const char * trap_community
static AtomicCounter libexec_count
static statetab states []
 Table of states ordered by id.
static Mutex serialize
 A mutex to serialize any direct console I/O operations.
static ThreadLock reloading
 A mutex to serialize reload requests.
static Traffic total_call_attempts
 master traffic counters for call attempts and call completions.
static Traffic total_call_complete
static volatile unsigned short total_active_calls
- Static Protected Attributes inherited from ost::Bayonne
static BayonneSession ** timeslots
static ScriptImage ** localimages
static char * status
static ScriptCommand * server
static unsigned ts_trk
static unsigned ts_ext
static timeslot_t ts_limit
static timeslot_t ts_count
static timeslot_t ts_used
static std::ostream * logging
static const char * path_prompts
static const char * path_tmpfs
static const char * path_tmp
static unsigned idle_count
static unsigned idle_limit
static bool shutdown_flag
static char sla [64]
static time_t start_time
static time_t reload_time

Detailed Description

Bayonne Msgports are used to queue and post session events which normally have to be passed through another thread context.

This can happen for a thread termination event, for example, since the thread terminating must be joined from another thread. Some drivers use session specific msgports to process all channel events.

Author:
David Sugar dyfet.nosp@m.@gnu.nosp@m.telep.nosp@m.hony.nosp@m..org Msgport event queing and dispatch.

Constructor & Destructor Documentation

virtual ost::BayonneMsgport::~BayonneMsgport ( )
virtual

Destroy a msgport.

ost::BayonneMsgport::BayonneMsgport ( BayonneDriver driver)

Create a message port and optionally bind it to a given driver.

Parameters:
driverto bind msgport to.

Member Function Documentation

virtual timeout_t ost::BayonneMsgport::getTimeout ( Event *  event)
protectedvirtual

Determine sleep time to schedule for waiting, unless an update occurs to force rescheduling.

Returns:
shortest timeout based on session timers.
Parameters:
eventto pass when timeout occurs.
void ost::BayonneMsgport::initial ( void  )

Initialize msgport, determine which sessions it will perform timing for based on the driver it is bound to.

size_t ost::BayonneMsgport::onPeek ( void *  buf)
protected
size_t ost::BayonneMsgport::onPost ( void *  buf)
protected
size_t ost::BayonneMsgport::onWait ( void *  buf)
protected
void ost::BayonneMsgport::run ( void  )
protected
void ost::BayonneMsgport::shutdown ( void  )
protected

Send shutdown event to the msgport.

void ost::BayonneMsgport::update ( void  )

Request retiming.

This is used for msgports that are per session to get the session to be retimed after an event has been directly posted outside the msgport.


Member Data Documentation

BayonneDriver* ost::BayonneMsgport::msgdriver
protected
unsigned ost::BayonneMsgport::msghead
protected
Event* ost::BayonneMsgport::msglist
protected
char ost::BayonneMsgport::msgname[16]
protected
unsigned ost::BayonneMsgport::msgsize
protected
unsigned ost::BayonneMsgport::msgtail
protected
timeslot_t ost::BayonneMsgport::tscount
protected
timeslot_t ost::BayonneMsgport::tsfirst
protected

The documentation for this class was generated from the following file: