Morten Tryfoss | 31 Oct 09:59 2014

Support for MAP noteMM event


I wonder if this is in the roadmap? Part of the mm-EventReportingContext-v3.
Contains information regarding available-status/registrations of mobile subscribers.

Best regards,
Morten Tryfoss

Morten Tryfoss | 30 Oct 15:12 2014

Camel - answer to InitialDP


I’ve written a simple application connecting to yate. This received the InitialDP, but I’m having trouble getting the call through.
Appearently everything seems to be sent back to the switch, but it’s not working (call is being disconnected).

This is the xml I’m sending back to yate:

<?xml version="1.0" encoding="utf-8"?>
<m xmlns="">
<remoteTID>02 00 04 c7</remoteTID>
<localTID>00 00 00 01</localTID>
      <dialog type="AARE" version="1"/>
<gt translation="0" plan="isdn" encoding="bcd" nature="international">4790000966</gt>
<gt translation="0" plan="isdn" encoding="bcd" nature="international">4741710799</gt>
<component remoteCID="0" type="ResultLast" operationCode="continue" operationClass="reportNone">

CallingPartyAddress and CalledPartyAdress is just flipped from what I receive.

What I’m I doing wrong?

Best regards,
Morten Tryfoss
Petros Moisiadis | 29 Oct 12:19 2014

Re: Help on tapping an E1 PRI line with a sangoma A102 card


I have just checked the code on SVN, but it seems that the following patches for the passive monitor on ISDN channels I have sent you a long time ago, have not been applied / merged yet. A system with these patches applied has been working on production for 2 years now, so could you please check them for merging into an upcoming release?
--- a/libs/ysig/q931.cpp
+++ b/libs/ysig/q931.cpp
<at> <at> -3600,7 +3600,11 <at> <at> void ISDNQ931Monitor::receiveData(const DataBlock& data, u_int8_t tei, ISDNLayer
     // Find a monitor for this message or create a new one
-    ISDNQ931CallMonitor* mon = findMonitor(msg->callRef(),true);
+    ISDNQ931CallMonitor* mon;
+    if (msg->initiator())
+        mon = findMonitor(msg->callRef(),m_q921Net == layer2);
+    else
+        mon = findMonitor(msg->callRef(),m_q921Net != layer2);
     while (true) {
     if (mon) {
<at> <at> -3754,7 +3754,7 <at> <at> void ISDNQ931Monitor::processMsgRestart(ISDNQ931Message* msg)
     // Terminate monitor(s)
     for (ObjList* o = list->skipNull(); o; o = o->skipNext()) {
     String* s = static_cast(o->get());
-    ISDNQ931CallMonitor* mon = findMonitor(s->toInteger(-1),false);
+    ISDNQ931CallMonitor* mon = findMonitor(s->toInteger(-1));
     if (mon) {
<at> <at> -3763,23 +3763,27 <at> <at> void ISDNQ931Monitor::processMsgRestart(ISDNQ931Message* msg)
     delete list;
-// Find a call monitor by call reference or reserved circuit
-ISDNQ931CallMonitor* ISDNQ931Monitor::findMonitor(unsigned int value, bool byCallRef)
+// Find a call monitor by call reference
+ISDNQ931CallMonitor* ISDNQ931Monitor::findMonitor(unsigned int callRef, bool netInit)
     Lock lock(this);
     ObjList* obj = m_calls.skipNull();
-    if (byCallRef) {
-    for (; obj; obj = obj->skipNext()) {
-        ISDNQ931CallMonitor* mon = static_cast(obj->get());
-        if (value == mon->m_callRef)
-        return (mon->ref() ? mon : 0);
-    }
-    return 0;
+    for (; obj; obj = obj->skipNext()) {
+        ISDNQ931CallMonitor* mon = static_cast(obj->get());
+    if (callRef == mon->m_callRef && netInit == mon->netInit())
+        return (mon->ref() ? mon : 0);
-    // Find by reserved circuit
+    return 0;
+// Find a call monitor by reserved circuit
+ISDNQ931CallMonitor* ISDNQ931Monitor::findMonitor(unsigned int circuit)
+    Lock lock(this);
+    ObjList* obj = m_calls.skipNull();
     for (; obj; obj = obj->skipNext()) {
     ISDNQ931CallMonitor* mon = static_cast(obj->get());
-    if (mon->m_callerCircuit && value == mon->m_callerCircuit->code())
+    if (mon->m_callerCircuit && circuit == mon->m_callerCircuit->code())
         return (mon->ref() ? mon : 0);
     return 0;
--- a/libs/ysig/yatesig.h
+++ b/libs/ysig/yatesig.h
<at> <at> -14680,7 +14680,9 <at> <at> protected:
     // Find a call monitor by call reference or reserved circuit
     // <at> return Referenced call monitor pointer or 0 if not found
-    ISDNQ931CallMonitor* findMonitor(unsigned int value, bool byCallRef);
+    ISDNQ931CallMonitor* findMonitor(unsigned int callRef, bool netInit);
+    ISDNQ931CallMonitor* findMonitor(unsigned int circuit);
     // Drop some messages. Return true if the message should be dropped
     bool dropMessage(const ISDNQ931Message* msg);

--- a/libs/ysig/engine.cpp
+++ b/libs/ysig/engine.cpp
<at> <at> -123,6 +124,8 <at> <at>
     return new ISDNQ921(*name,*name);
     else if (type == YSTRING("ISDNQ931"))
     return new ISDNQ931(*name,*name);
+    else if (type == YSTRING("ISDNQ921Passive"))
+    return new ISDNQ921Passive(*name,*name);
     else if (type == YSTRING("ISDNQ931Monitor"))
     return new ISDNQ931Monitor(*name,*name);
     Debug(DebugMild,"Factory could not create '%s' named '%s'",type.c_str(),name->c_str());
--- a/modules/server/ysigchan.cpp
+++ b/modules/server/ysigchan.cpp
<at> <at> -4057,7 +4058,7 <at> <at>
     // Create links between components and enable them
+    q931()->initialize(¶ms);
     // Start thread
     if (!startThread(error,plugin.engine()->tickDefault(),
body, html { margin:0; padding:0; width:100%; } #signature { background-color:#fff; width:100%; } td { padding:15px; } #logo img { padding-right:20px; border-right:1px solid #dedede; } #cont { padding-left:0; width:100%; color: #555; vertical-align:top; font-family:arial;} #cont h3 { font-size: 16px; } #cont ul { list-style: disc; color: #243f66; padding-left: 8px;} #cont ul .key { color: #666 } #cont ul .value { color: #888 } #cont li { background-repeat : no-repeat; margin-left:5px;} .comp { font-size: 13px; } img { border: none; } a { color: #000000; }

Petros Moisiadis

  • Tel : (+30) 215 215 15 17
  • Fax : (+30) 215 215 15 09
  • VoIP call
Modulus S.A.
Τel: (+30) 215 215 15 00
118D, Kifisias AVE, GR 115 26 Athens, GREECE
Nitesh Divecha | 28 Oct 13:54 2014

SS7 Setup/Configuration

Hello All,

Does anyone have a working SS7 configuration or setup guide for Yate? 

This is my setup: 

Nextone --> SIP --> Yate --> SS7/IP --> Public Switch

Any information will be highly appreciated.

Thanking in advance. 


Marco Bisignano | 28 Oct 12:40 2014

SDP + RTP problem

Hi all, I have the following problem: I’m using two devices that have a codec called “SCIP” used for secure communications; Yate does not let it pass:


INVITE BEFORE YATE (from Wireshark):


Media Description, name and address (m): audio 55010 RTP/AVP 0 8 18 96 104

Media Attribute (a): rtpmap:0 PCMU/8000

Media Attribute (a): rtpmap:8 PCMA/8000

Media Attribute (a): rtpmap:18 G729/8000

Media Attribute (a): rtpmap:96 telephone-event/8000

Media Attribute (a): rtpmap:104 scip/8000


INVITE AFTER YATE (from Wireshark):


Media Description, name and address (m): audio 18610 RTP/AVP 0 8 101

Media Attribute (a): rtpmap:0 PCMU/8000

Media Attribute (a): rtpmap:8 PCMA/8000

Media Attribute (a): rtpmap:101 telephone-event/8000


I know I can use forward_sdp + rtp_forward and it works, but for security reason the rtp flow cannot go between the two devices, it has to pass through Yate (through the rtp proxy). So how can I let SDP passed unchanged and continue to use Yate as rtp proxy ?


Bipin Patel | 28 Oct 11:11 2014

change caller id when same as called number


i am stuck in a situation when the client is sending calls to yate with the called number and callerid both as same number, i want to detect this and modify or block the cli in regexroute when sending call to gateway and still allow the call through.

Can any1 help me with this on how can this be achieved:

check if cli is same as called number, if yes then change to something else and if no then leave everything as it is

body { font-family: Verdana, sans-serif; font-size: 0.8em; color:#484848; } h1, h2, h3 { font-family: "Trebuchet MS", Verdana, sans-serif; margin:0in; margin-bottom:.0001pt; } p.footr { font-family: "Trebuchet MS", Verdana, sans-serif; margin:0in; margin-bottom:.0001pt; } h1 { font-size: 1.2em; } h2, h3 { font-size: 1.1em; } a, a:link, a:visited { color: #2A5685;} a:hover, a:active { color: #c61a1a; } { display: none; } hr { width: 100%; height: 1px; background: #ccc; border: 0; } Regards,

Vincent | 27 Oct 02:47 2014

Why need not lock protect when add one channel to the room


Revision 5918:

// Add one channel to the room without lock protection
void ConfRoom::addChannel(ConfChan* chan, bool player)
    if (!chan)

// Remove one channel from the room with lock
void ConfRoom::delChannel(ConfChan* chan)
    if (!chan)
    Lock mylock(this);
    if (chan == m_record)
m_record = 0;
    if (m_playerId && (chan->id() == m_playerId))
    if (m_chans.remove(chan,false) && chan->isCounted()) {

Kind regards,

Steve O'Hara-Smith | 26 Oct 08:51 2014

register interval


	I'm seeing an odd spiral of death effect with two of my VOIP
providers (DID Logic and Freespeech Ireland). I have them set up in
accfile.conf with a 3600 second interval and often that will stick for
several days before I start getting responses with a shorter expire in the
header, at which point the next register is at the requested interval -
which is of course fine *but* the requested expire is the new one rather
than the configured 3600. The spiral of death occurs as the responses
shorten always winding up at 224 seconds until eventually two register
requests get sent before the response (the lack of timestamps in the logs
makes it impossible to tell whether the response was delayed or the
requests were sent too fast) and from then on I get 401 responses to the
register requests until I restart Yate.

	Suggestions for preventing this would be very welcome.


Steve O'Hara-Smith <steve@...>

Navaratne | 22 Oct 07:39 2014

STP function

Hello yate team,

Im new to yate and following on your signalling implementation. I have a small question on this.

Can we implement a STP functionality using yate to act as a MAP gateway similar to cisco ITP. Basically to application/ssn level inward routing and GTT outward.

I could see very little config re gtt on the configurations, but couldnt not figure out how to actually implement it.

Rodrigo Ricardo Passos | 23 Apr 14:36 2014

Get number in SAM

Hi Yate,

How can i get the digit in SAM message after receive an IAM using 



Dana cafe | 2 May 14:50 2014

queue.conf operators configuration

good afternoon,

I am trying to put calls in a queue and redistribute to operators 
(without using a database) but I don't know how to define these operators.

For testing i defined two users in regfile.conf:



Then in regexroute.conf I defined:


Finally test1 is defined  in the queue.conf file :


[queue test1]
mintime = 100
length= 100
onhold=wave/play/ test.wav
;definition of the operator
${queue} = test1
${required} = 1
${current} = 1
;  ${waiting}
  maxcall = 3000
;  prompt: string: Resource to play to the operator when it answers

using yate client logged as 1000 I call to 100 and the music on hold 
start but the call is not distributed to the user 2000 which is logged 
in another yate client. For sure the configuration of the operator is 
wrong, unfortunatelly I didn't find a useful example in the website and 
in internet.

thank you very much for your valuable help,