Yate
ISDNQ931 Class Reference

ISDN Q.931 implementation on top of Q.921. More...

#include <yatesig.h>

Inheritance diagram for ISDNQ931:
SignallingCallControl SignallingDumpable ISDNLayer3 Mutex SignallingComponent Lockable RefObject DebugEnabler GenObject

Public Types

enum  BehaviourFlags {
  SendNonIsdnSource = 0x00000001 , IgnoreNonIsdnDest = 0x00000002 , ForcePresNetProv = 0x00000004 , Translate31kAudio = 0x00000008 ,
  URDITransferCapsOnly = 0x00000010 , NoLayer1Caps = 0x00000020 , IgnoreNonLockedIE = 0x00000040 , NoDisplayIE = 0x00000080 ,
  NoDisplayCharset = 0x00000100 , ForceSendComplete = 0x00000200 , NoActiveOnConnect = 0x00000400 , CheckNotifyInd = 0x00000800 ,
  ChannelExclusive = 0x00001000
}
 
enum  SwitchType {
  Unknown = 0 , EuroIsdnE1 = ForceSendComplete|CheckNotifyInd|NoDisplayCharset|URDITransferCapsOnly , EuroIsdnT1 = ForceSendComplete|CheckNotifyInd , NationalIsdn = SendNonIsdnSource ,
  Dms100 = ForcePresNetProv|IgnoreNonIsdnDest , Lucent5e = IgnoreNonLockedIE , Att4ess = ForcePresNetProv|IgnoreNonLockedIE|Translate31kAudio|NoLayer1Caps , QSIG = NoActiveOnConnect|NoDisplayIE|NoDisplayCharset
}
 
- Public Types inherited from SignallingCallControl
enum  MediaRequired { MediaNever , MediaAnswered , MediaRinging , MediaAlways }
 

Public Member Functions

 ISDNQ931 (const NamedList &params, const char *name=0)
 
virtual ~ISDNQ931 ()
 
virtual bool initialize (const NamedList *config)
 
virtual const char * statusName () const
 
const ISDNLayer2layer2 () const
 
bool primaryRate () const
 
bool network () const
 
bool transferModeCircuit () const
 
ISDNQ931ParserDataparserData ()
 
const StringnumPlan () const
 
const StringnumType () const
 
const StringnumPresentation () const
 
const StringnumScreening () const
 
const Stringformat () const
 
bool sendMessage (ISDNQ931Message *msg, u_int8_t tei, String *reason=0)
 
virtual void multipleFrameEstablished (u_int8_t tei, bool confirm, bool timeout, ISDNLayer2 *layer2)
 
virtual void multipleFrameReleased (u_int8_t tei, bool confirm, bool timeout, ISDNLayer2 *layer2)
 
virtual void receiveData (const DataBlock &data, u_int8_t tei, ISDNLayer2 *layer2)
 
virtual ISDNLayer2attach (ISDNLayer2 *q921)
 
SignallingCallcall (SignallingMessage *msg, String &reason)
 
bool restart (const char *circuits)
 
bool sendStatus (ISDNQ931Call *call, const char *cause, u_int8_t tei=0, const char *display=0, const char *diagnostic=0)
 
bool sendRelease (ISDNQ931Call *call, bool release, const char *cause, u_int8_t tei=0, const char *diag=0, const char *display=0, const char *signal=0)
 
virtual void cleanup (const char *reason="offline")
 
void setInterval (SignallingTimer &timer, int id)
 
void manageTimeout ()
 
void setDebug (bool printMsg, bool extendedDebug)
 
- Public Member Functions inherited from SignallingCallControl
 SignallingCallControl (const NamedList &params, const char *msgPrefix=0)
 
virtual ~SignallingCallControl ()
 
const Stringlocation () const
 
void setExiting ()
 
bool exiting () const
 
bool verify ()
 
MediaRequired mediaRequired () const
 
const StringmsgPrefix () const
 
SignallingCircuitGroupcircuits () const
 
const ObjListcalls () const
 
SignallingCircuitGroupattach (SignallingCircuitGroup *circuits)
 
bool reserveCircuit (SignallingCircuit *&cic, const char *range=0, int checkLock=-1, const String *list=0, bool mandatory=true, bool reverseRestrict=false)
 
bool releaseCircuit (SignallingCircuit *&cic, bool sync=false)
 
bool releaseCircuit (unsigned int code, bool sync=false)
 
virtual SignallingEventgetEvent (const Time &when)
 
virtual void buildVerifyEvent (NamedList &params)
 
- Public Member Functions inherited from Mutex
 Mutex (bool recursive=false, const char *name=0)
 
 Mutex (const Mutex &original)
 
 ~Mutex ()
 
Mutexoperator= (const Mutex &original)
 
virtual bool lock (long maxwait=-1)
 
virtual bool unlock ()
 
virtual bool locked () const
 
const char * owner () const
 
bool recursive () const
 
- Public Member Functions inherited from Lockable
virtual ~Lockable ()
 
virtual bool check (long maxwait=-1)
 
virtual bool unlockAll ()
 
- Public Member Functions inherited from SignallingDumpable
 ~SignallingDumpable ()
 
- Public Member Functions inherited from ISDNLayer3
virtual void dataLinkState (u_int8_t tei, bool cmd, bool value, ISDNLayer2 *layer2)
 
virtual void idleTimeout (ISDNLayer2 *layer2)
 
- Public Member Functions inherited from SignallingComponent
virtual ~SignallingComponent ()
 
virtual const StringtoString () const
 
virtual NamedListcontrolCreate (const char *oper=0)
 
virtual bool controlExecute (NamedList *params)
 
virtual void engine (SignallingEngine *eng)
 
SignallingEngineengine () const
 
int debugLevel (int level)
 
const StringcomponentType () const
 
- Public Member Functions inherited from RefObject
 RefObject ()
 
virtual ~RefObject ()
 
virtual void * getObject (const String &name) const
 
virtual bool alive () const
 
bool ref ()
 
bool deref ()
 
int refcount () const
 
virtual void destruct ()
 
- Public Member Functions inherited from GenObject
 GenObject ()
 
virtual ~GenObject ()
 
virtual const StringtraceId () const
 
NamedCountergetObjCounter () const
 
NamedCountersetObjCounter (NamedCounter *counter)
 
- Public Member Functions inherited from DebugEnabler
 DebugEnabler (int level=TelEngine::debugLevel(), bool enabled=true)
 
int debugLevel () const
 
int debugLevel (int level)
 
bool debugEnabled () const
 
void debugEnabled (bool enable)
 
const char * debugName () const
 
bool debugAt (int level) const
 
bool debugChained () const
 
void debugChain (const DebugEnabler *chain=0)
 
void debugCopy (const DebugEnabler *original=0)
 

Static Public Attributes

static const TokenDict s_flags []
 
static const TokenDict s_swType []
 

Protected Member Functions

virtual void destroyed ()
 
virtual void timerTick (const Time &when)
 
ISDNQ931CallfindCall (u_int32_t callRef, bool outgoing, u_int8_t tei=0)
 
ISDNQ931CallfindCall (unsigned int circuit)
 
void terminateCalls (ObjList *list, const char *reason)
 
bool acceptNewCall (bool outgoing, String &reason)
 
ISDNQ931MessagegetMsg (const DataBlock &data)
 
ISDNQ931MessageendReceiveSegment (const char *reason=0)
 
void processGlobalMsg (ISDNQ931Message *msg, u_int8_t tei=0)
 
void processMsgRestart (ISDNQ931Message *msg, u_int8_t tei=0)
 
void processInvalidMsg (ISDNQ931Message *msg, u_int8_t tei=0)
 
void sendRestart (u_int64_t time=Time::msecNow(), bool retrans=false)
 
void endRestart (bool restart, u_int64_t time, bool timeout=false)
 
bool sendStatus (const char *cause, u_int8_t callRefLen, u_int32_t callRef=0, u_int8_t tei=0, bool initiator=false, ISDNQ931Call::State state=ISDNQ931Call::Null, const char *display=0, const char *diagnostic=0)
 
bool sendRelease (bool release, u_int8_t callRefLen, u_int32_t callRef, u_int8_t tei, bool initiator, const char *cause=0, const char *diag=0, const char *display=0, const char *signal=0)
 
- Protected Member Functions inherited from SignallingCallControl
int strategy () const
 
virtual bool processEvent (SignallingEvent *event)
 
virtual SignallingEventprocessCircuitEvent (SignallingCircuitEvent *&event, SignallingCall *call=0)
 
void clearCalls ()
 
void removeCall (SignallingCall *call, bool del=false)
 
void setVerify (bool restartTimer=false, bool fireNow=false, const Time *time=0)
 
- Protected Member Functions inherited from SignallingDumpable
 SignallingDumpable (SignallingDumper::Type type, bool network=false)
 
bool dump (void *buf, unsigned int len, bool sent=false, int link=0)
 
bool dump (const DataBlock &data, bool sent=false, int link=0)
 
void setDumpNetwork (bool network)
 
void setDumper (SignallingDumper *dumper=0)
 
bool setDumper (const String &name, bool create=true, bool append=false)
 
bool control (NamedList &params, SignallingComponent *owner=0)
 
- Protected Member Functions inherited from ISDNLayer3
 ISDNLayer3 (const char *name=0)
 
Mutexl3Mutex ()
 
- Protected Member Functions inherited from SignallingComponent
 SignallingComponent (const char *name=0, const NamedList *params=0, const char *type="unknown")
 
void insert (SignallingComponent *component)
 
virtual void detach ()
 
void setName (const char *name)
 
void setCompType (const char *type)
 
unsigned long tickSleep (unsigned long usec=1000000) const
 
- Protected Member Functions inherited from RefObject
virtual void zeroRefs ()
 
bool resurrect ()
 
- Protected Member Functions inherited from DebugEnabler
void debugName (const char *name)
 

Friends

class ISDNQ931Call
 

Additional Inherited Members

- Static Public Member Functions inherited from Mutex
static int count ()
 
static int locks ()
 
static bool efficientTimedLock ()
 
- Static Public Member Functions inherited from Lockable
static void wait (unsigned long maxwait)
 
static unsigned long wait ()
 
static void startUsingNow ()
 
static void enableSafety (bool safe=true)
 
static bool safety ()
 
- Static Public Member Functions inherited from SignallingComponent
static bool resolveConfig (const String &cmpName, NamedList &params, const NamedList *config)
 
- Static Public Member Functions inherited from RefObject
static bool alive (const RefObject *obj)
 
static bool efficientIncDec ()
 
- Static Public Member Functions inherited from GenObject
static void * getObject (const String &name, const GenObject *obj)
 
static bool getObjCounting ()
 
static void setObjCounting (bool enable)
 
static NamedCountergetObjCounter (const String &name, bool create=true)
 
static ObjListgetObjCounters ()
 
- Protected Attributes inherited from SignallingCallControl
ObjList m_calls
 
String m_msgPrefix
 
MediaRequired m_mediaRequired
 
bool m_verifyEvent
 
SignallingTimer m_verifyTimer
 
String m_location
 
- Static Protected Attributes inherited from SignallingCallControl
static const TokenDict s_mediaRequired []
 

Detailed Description

ISDN Q.931 implementation on top of Q.921.

Q.931 ISDN Layer 3 implementation on top of a Layer 2

Member Enumeration Documentation

◆ BehaviourFlags

Enumeration flags defining the behaviour of the ISDN call controller and any active calls managed by it

◆ SwitchType

enum SwitchType

Call controller switch type. Each value is a mask of behaviour flags

Constructor & Destructor Documentation

◆ ISDNQ931()

ISDNQ931 ( const NamedList & params,
const char * name = 0 )

Constructor Initialize this object and the component

Parameters
paramsLayer's parameters and parser settings
nameName of this component

◆ ~ISDNQ931()

virtual ~ISDNQ931 ( )
virtual

Destructor Destroy all calls

Member Function Documentation

◆ acceptNewCall()

bool acceptNewCall ( bool outgoing,
String & reason )
protected

Check if this call control can accept new calls

Parameters
outgoingCall direction (true for outgoing)
reasonString to be filled with the reason if not accepted
Returns
True if the call request is accepted

◆ attach()

virtual ISDNLayer2 * attach ( ISDNLayer2 * q921)
virtual

Attach an ISDN Q.921 transport This method is thread safe

Parameters
q921Pointer to the Q.921 transport to attach
Returns
Pointer to the detached Layer 2 or NULL

Reimplemented from ISDNLayer3.

Referenced by destroyed().

◆ call()

SignallingCall * call ( SignallingMessage * msg,
String & reason )
virtual

Create an outgoing call. Send a NewCall event with the given msg parameter

Parameters
msgCall parameters
reasonFailure reason if any
Returns
Referenced SignallingCall pointer on success or 0 on failure

Reimplemented from SignallingCallControl.

Referenced by sendRelease(), and sendStatus().

◆ cleanup()

virtual void cleanup ( const char * reason = "offline")
virtual

Set terminate to all calls This method is thread safe

Parameters
reasonCleanup reason

Reimplemented from SignallingCallControl.

◆ destroyed()

virtual void destroyed ( )
inlineprotectedvirtual

Detach links. Disposes memory

Reimplemented from SignallingComponent.

References attach(), SignallingCallControl::attach(), and RefObject::destroyed().

◆ endReceiveSegment()

ISDNQ931Message * endReceiveSegment ( const char * reason = 0)
protected

End waiting for message segments If reason is 0 parse already received data for the segmented message This method is thread safe

Parameters
reasonDebug info reason. If non 0 drop the received segment(s)
Returns
ISDNQ931Message pointer or 0

◆ endRestart()

void endRestart ( bool restart,
u_int64_t time,
bool timeout = false )
protected

End restart procedure on timeout or restart acknoledge This method is thread safe

Parameters
restartTrue to try to send restart for the next circuit
timeThe time of the transmission
timeoutTrue if a restart request timed out

References restart().

◆ findCall() [1/2]

ISDNQ931Call * findCall ( u_int32_t callRef,
bool outgoing,
u_int8_t tei = 0 )
protected

Find a call given its call reference and direction

Parameters
callRefThe call reference to find
outgoingTrue to find an outgoing call, false to find an incoming one
teiTEI of the layer associated to the call to find
Returns
A referenced pointer to a call or 0

◆ findCall() [2/2]

ISDNQ931Call * findCall ( unsigned int circuit)
protected

Find a call given a circuit number

Parameters
circuitThe circuit number to find
Returns
A referenced pointer to a call or 0

◆ format()

const String & format ( ) const
inline

Get the default data format for outgoing calls

Returns
The default data format for outgoing calls

◆ getMsg()

ISDNQ931Message * getMsg ( const DataBlock & data)
protected

Process received data. Process received message segments if any

Parameters
dataThe received data
Returns
ISDNQ931Message pointer or 0

◆ initialize()

virtual bool initialize ( const NamedList * config)
virtual

Configure and initialize Q.931 and its layer 2

Parameters
configOptional configuration parameters override
Returns
True if Q.931 and the layer 2 were initialized properly

Reimplemented from SignallingComponent.

◆ layer2()

const ISDNLayer2 * layer2 ( ) const
inline

Get the layer 2 attached to this object

Returns
Pointer to the layer 2 attached to this object or 0 if none

Referenced by multipleFrameEstablished(), multipleFrameReleased(), and receiveData().

◆ manageTimeout()

void manageTimeout ( )

Manage timeout for the call setup message

◆ multipleFrameEstablished()

virtual void multipleFrameEstablished ( u_int8_t tei,
bool confirm,
bool timeout,
ISDNLayer2 * layer2 )
virtual

Notification of Layer 2 up state

Parameters
teiTEI received by the Layer 2
confirmTrue if this is a confirmation of a previous request. False if it is an indication of state change on remote request
timeoutTrue if the reason is a timeout.
layer2Pointer to the notifier

Reimplemented from ISDNLayer3.

References layer2().

◆ multipleFrameReleased()

virtual void multipleFrameReleased ( u_int8_t tei,
bool confirm,
bool timeout,
ISDNLayer2 * layer2 )
virtual

Notification of Layer 2 down state

Parameters
teiTEI received by the Layer 2
confirmTrue if this is a confirmation of a previous request. False if it is an indication of state change on remote request
timeoutTrue if the reason is a timeout.
layer2Pointer to the notifier

Reimplemented from ISDNLayer3.

References layer2().

◆ network()

bool network ( ) const
inline

Chech if this call controller is at the NET or CPE side of the link

Returns
True if we are NET, false if we are CPE

◆ numPlan()

const String & numPlan ( ) const
inline

Get the default numbering plan for outgoing calls

Returns
The default numbering plan for outgoing calls

◆ numPresentation()

const String & numPresentation ( ) const
inline

Get the default number presentation for outgoing calls

Returns
The default number presentation for outgoing calls

◆ numScreening()

const String & numScreening ( ) const
inline

Get the default number screening for outgoing calls

Returns
The default number screening for outgoing calls

◆ numType()

const String & numType ( ) const
inline

Get the default number type for outgoing calls

Returns
The default number type for outgoing calls

◆ parserData()

ISDNQ931ParserData & parserData ( )
inline

Get the parser settings of this call control

Returns
The parser settings

◆ primaryRate()

bool primaryRate ( ) const
inline

Check if this call controller supports primary or basic rate transfer

Returns
True for primary rate. False for basic rate

◆ processGlobalMsg()

void processGlobalMsg ( ISDNQ931Message * msg,
u_int8_t tei = 0 )
protected

Process messages with global call reference or should have one

Parameters
msgThe received message
teiThe TEI received with the message

◆ processInvalidMsg()

void processInvalidMsg ( ISDNQ931Message * msg,
u_int8_t tei = 0 )
protected

Process messages with invalid call reference

Parameters
msgThe received message
teiThe TEI received with the message

◆ processMsgRestart()

void processMsgRestart ( ISDNQ931Message * msg,
u_int8_t tei = 0 )
protected

Process a restart request

Parameters
msgThe received message
teiThe TEI received with the message

◆ receiveData()

virtual void receiveData ( const DataBlock & data,
u_int8_t tei,
ISDNLayer2 * layer2 )
virtual

Receive data from Layer 2

Parameters
dataReceived data
teiTEI received by the Layer 2
layer2Pointer to the sender Layer 2

Implements ISDNLayer3.

References layer2().

◆ restart()

bool restart ( const char * circuits)

Restart one or more the circuits

Parameters
circuitsComma separated list of circuits to be restarted
Returns
True if the procedure was successfully started or enqueued

References SignallingCallControl::circuits().

Referenced by endRestart().

◆ sendMessage()

bool sendMessage ( ISDNQ931Message * msg,
u_int8_t tei,
String * reason = 0 )

Send a message

Parameters
msgThe message to be sent
teiTEI value to use at Layer 2
reasonOptional string to write the failure reason
Returns
False if the message is invalid, Layer 2 is missing or refused the data

◆ sendRelease() [1/2]

bool sendRelease ( bool release,
u_int8_t callRefLen,
u_int32_t callRef,
u_int8_t tei,
bool initiator,
const char * cause = 0,
const char * diag = 0,
const char * display = 0,
const char * signal = 0 )
protected

Send a RELEASE or RELEASE COMPLETE message

Parameters
releaseTrue to send RELEASE, false to send RELEASE COMPLETE
callRefLenThe call reference length parameter
callRefThe call reference
teiThe TEI of the Layer 2 associated with the call
initiatorThe call initiator flag
causeValue for Cause IE
diagOptional hexified string for cause dignostic
displayOptional value for Display IE
signalOptional value for Signal IE
Returns
The result of the operation (true if successfully sent)

◆ sendRelease() [2/2]

bool sendRelease ( ISDNQ931Call * call,
bool release,
const char * cause,
u_int8_t tei = 0,
const char * diag = 0,
const char * display = 0,
const char * signal = 0 )
inline

Send a RELEASE or RELEASE COMPLETE message for a given call

Parameters
callThe call requesting the operation
releaseTrue to send RELEASE, false to send RELEASE COMPLETE
causeValue for Cause IE
teiTEI to which the release is sent to
diagOptional hexified string for cause dignostic
displayOptional value for Display IE
signalOptional value for Signal IE
Returns
The result of the operation (true if successfully sent)

References call(), and sendRelease().

Referenced by sendRelease().

◆ sendRestart()

void sendRestart ( u_int64_t time = Time::msecNow(),
bool retrans = false )
protected

Try to reserve a circuit for restarting if none. Send a restart request on it's behalf Start counting the restart interval if no circuit reserved This method is thread safe

Parameters
timeThe time of the transmission
retransRetransmission flag (true if a previous request timed out)

References Time::msecNow().

◆ sendStatus() [1/2]

bool sendStatus ( const char * cause,
u_int8_t callRefLen,
u_int32_t callRef = 0,
u_int8_t tei = 0,
bool initiator = false,
ISDNQ931Call::State state = ISDNQ931Call::Null,
const char * display = 0,
const char * diagnostic = 0 )
protected

Send a STATUS message

Parameters
causeValue for Cause IE
callRefLenThe call reference length parameter.
callRefThe call reference
teiThe TEI to send with the STATUS message
initiatorTrue if this is from the call initiator
stateThe state for CallState IE
displayOptional value for Display IE
diagnosticOptional value for cause diagnostic value
Returns
The result of the operation (true if successfully sent)

◆ sendStatus() [2/2]

bool sendStatus ( ISDNQ931Call * call,
const char * cause,
u_int8_t tei = 0,
const char * display = 0,
const char * diagnostic = 0 )
inline

Send a STATUS message for a given call

Parameters
callThe call requesting the operation
teiThe TEI to send with the STATUS message
causeValue for Cause IE
displayOptional value for Display IE
diagnosticOptional value for cause diagnostic value
Returns
The result of the operation (true if successfully sent)

References call(), and sendStatus().

Referenced by sendStatus().

◆ setDebug()

void setDebug ( bool printMsg,
bool extendedDebug )
inline

Set debug data of this call controller

Parameters
printMsgEnable/disable message printing on output
extendedDebugEnable/disable hex data dump if print messages is enabled

◆ setInterval()

void setInterval ( SignallingTimer & timer,
int id )

Set the timeout interval for a given timer if implemented If the timer is not implemented the interval is set to 0

Parameters
timerThe destination timer
idThe timer number as defined in Q.931

◆ statusName()

virtual const char * statusName ( ) const
virtual

Get the controller's status as text

Returns
Controller status name

Implements SignallingCallControl.

◆ terminateCalls()

void terminateCalls ( ObjList * list,
const char * reason )
protected

Terminate calls. If list is 0 terminate all calls

Parameters
listOptional list of circuits (strings) to be released
reasonThe reason to be passed to each terminated call

◆ timerTick()

virtual void timerTick ( const Time & when)
protectedvirtual

Method called periodically to check timeouts This method is thread safe

Parameters
whenTime to use as computing base for events and timeouts

Reimplemented from SignallingComponent.

◆ transferModeCircuit()

bool transferModeCircuit ( ) const
inline

Check if this call controller supports circuit switch or packet mode transfer

Returns
True for circuit switch. False for packet mode

Member Data Documentation

◆ s_flags

const TokenDict s_flags[]
static

The list of behaviour flag names

◆ s_swType

const TokenDict s_swType[]
static

The list of switch type names


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