Improved call detail by adding unique channels IDs and checking for the ID.
Direction of calls is added to the CDR data set and written to file. git-svn-id: http://voip.null.ro/svn/yate@105 acf43c95-373e-0410-b603-e72c3f656dc1
This commit is contained in:
parent
3d111c6881
commit
6ff2c10122
|
@ -73,6 +73,10 @@ CdrBuilder::CdrBuilder(const char *name, const char *caller, const char *called)
|
|||
|
||||
CdrBuilder::~CdrBuilder()
|
||||
{
|
||||
const char *dir = m_ring ?
|
||||
(m_call ? "bidir" : "incoming") :
|
||||
(m_call ? "outgoing" : "unknown");
|
||||
|
||||
if (!m_hangup)
|
||||
m_hangup = Time::now();
|
||||
if (!m_ring)
|
||||
|
@ -87,6 +91,7 @@ CdrBuilder::~CdrBuilder()
|
|||
Message *m = new Message("cdr");
|
||||
m->addParam("time",String(sec(m_ring)));
|
||||
m->addParam("chan",c_str());
|
||||
m->addParam("direction",dir);
|
||||
m->addParam("caller",m_caller);
|
||||
m->addParam("called",m_called);
|
||||
m->addParam("duration",String(sec(m_hangup - m_ring)));
|
||||
|
@ -99,7 +104,7 @@ CdrBuilder::~CdrBuilder()
|
|||
String CdrBuilder::getStatus() const
|
||||
{
|
||||
String s(m_status);
|
||||
s << "/" << m_caller << "/" << m_called;
|
||||
s << "|" << m_caller << "|" << m_called;
|
||||
return s;
|
||||
}
|
||||
|
||||
|
@ -151,6 +156,8 @@ bool CdrHandler::received(Message &msg)
|
|||
id += msg.getValue("span");
|
||||
id += "/";
|
||||
id += msg.getValue("channel");
|
||||
if (id == "//")
|
||||
return false;
|
||||
}
|
||||
CdrBuilder *b = CdrBuilder::find(id);
|
||||
if (!b && ((m_type == CdrRing) || (m_type == CdrCall))) {
|
||||
|
|
|
@ -48,8 +48,8 @@ bool CdrFileHandler::received(Message &msg)
|
|||
Lock lock(m_lock);
|
||||
if (m_file) {
|
||||
const char *format = m_tabs
|
||||
? "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n"
|
||||
: "%s,\"%s\",\"%s\",\"%s\",%s,%s,%s,\"%s\"\n";
|
||||
? "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n"
|
||||
: "%s,\"%s\",\"%s\",\"%s\",%s,%s,%s,\"%s\",\"%s\"\n";
|
||||
::fprintf(m_file,format,
|
||||
c_safe(msg.getValue("time")),
|
||||
c_safe(msg.getValue("chan")),
|
||||
|
@ -58,7 +58,8 @@ bool CdrFileHandler::received(Message &msg)
|
|||
c_safe(msg.getValue("billtime")),
|
||||
c_safe(msg.getValue("ringtime")),
|
||||
c_safe(msg.getValue("duration")),
|
||||
c_safe(msg.getValue("status"))
|
||||
c_safe(msg.getValue("status")),
|
||||
c_safe(msg.getValue("direction"))
|
||||
);
|
||||
::fflush(m_file);
|
||||
}
|
||||
|
|
|
@ -47,6 +47,11 @@ public:
|
|||
ToneChan(const String &tone);
|
||||
~ToneChan();
|
||||
virtual void disconnected(const char *reason);
|
||||
inline const String &id() const
|
||||
{ return m_id; }
|
||||
private:
|
||||
String m_id;
|
||||
static int s_nextid;
|
||||
};
|
||||
|
||||
class ToneHandler : public MessageHandler
|
||||
|
@ -194,11 +199,14 @@ void ToneSource::run()
|
|||
m_time = 0;
|
||||
}
|
||||
|
||||
int ToneChan::s_nextid = 1;
|
||||
|
||||
ToneChan::ToneChan(const String &tone)
|
||||
: DataEndpoint("tone")
|
||||
{
|
||||
Debug(DebugAll,"ToneChan::ToneChan(\"%s\") [%p]",tone.c_str(),this);
|
||||
mutex.lock();
|
||||
m_id << "tone/" << s_nextid++;
|
||||
chans.append(this);
|
||||
mutex.unlock();
|
||||
ToneSource *t = ToneSource::getTone(tone);
|
||||
|
@ -212,7 +220,7 @@ ToneChan::ToneChan(const String &tone)
|
|||
|
||||
ToneChan::~ToneChan()
|
||||
{
|
||||
Debug(DebugAll,"ToneChan::~ToneChan() [%p]",this);
|
||||
Debug(DebugAll,"ToneChan::~ToneChan() %s [%p]",m_id.c_str(),this);
|
||||
mutex.lock();
|
||||
chans.remove(this,false);
|
||||
mutex.unlock();
|
||||
|
@ -259,6 +267,7 @@ bool ToneHandler::received(Message &msg)
|
|||
m.addParam("callto",m.retValue());
|
||||
m.retValue() = 0;
|
||||
ToneChan *tc = new ToneChan(dest.matchString(1).c_str());
|
||||
m.setParam("id",tc->id());
|
||||
m.userData(tc);
|
||||
if (Engine::dispatch(m)) {
|
||||
tc->deref();
|
||||
|
|
|
@ -60,6 +60,11 @@ public:
|
|||
WaveChan(const String& file, bool record, unsigned maxlen = 0);
|
||||
~WaveChan();
|
||||
virtual void disconnected(const char *reason);
|
||||
inline const String &id() const
|
||||
{ return m_id; }
|
||||
private:
|
||||
String m_id;
|
||||
static int s_nextid;
|
||||
};
|
||||
|
||||
class WaveHandler : public MessageHandler
|
||||
|
@ -234,10 +239,16 @@ void WaveConsumer::Consume(const DataBlock &data, unsigned long timeDelta)
|
|||
}
|
||||
}
|
||||
|
||||
Mutex mutex;
|
||||
int WaveChan::s_nextid = 1;
|
||||
|
||||
WaveChan::WaveChan(const String& file, bool record, unsigned maxlen)
|
||||
: DataEndpoint("wavefile")
|
||||
{
|
||||
Debug(DebugAll,"WaveChan::WaveChan(%s) [%p]",(record ? "record" : "play"),this);
|
||||
mutex.lock();
|
||||
m_id << "wave/" << s_nextid++;
|
||||
mutex.unlock();
|
||||
if (record) {
|
||||
setConsumer(new WaveConsumer(file,this,maxlen));
|
||||
getConsumer()->deref();
|
||||
|
@ -250,7 +261,7 @@ WaveChan::WaveChan(const String& file, bool record, unsigned maxlen)
|
|||
|
||||
WaveChan::~WaveChan()
|
||||
{
|
||||
Debug(DebugAll,"WaveChan::~WaveChan() [%p]",this);
|
||||
Debug(DebugAll,"WaveChan::~WaveChan() %s [%p]",m_id.c_str(),this);
|
||||
}
|
||||
|
||||
void WaveChan::disconnected(const char *reason)
|
||||
|
@ -309,6 +320,7 @@ bool WaveHandler::received(Message &msg)
|
|||
m.addParam("callto",m.retValue());
|
||||
m.retValue() = 0;
|
||||
WaveChan *c = new WaveChan(dest.matchString(2),meth,maxlen);
|
||||
m.setParam("id",c->id());
|
||||
m.userData(c);
|
||||
if (Engine::dispatch(m)) {
|
||||
c->deref();
|
||||
|
|
|
@ -1063,6 +1063,7 @@ bool ZapChan::answer()
|
|||
m->addParam("driver","zap");
|
||||
m->addParam("span",String(m_span->span()));
|
||||
m->addParam("channel",String(m_chan));
|
||||
m->addParam("status","answered");
|
||||
Engine::enqueue(m);
|
||||
return true;
|
||||
}
|
||||
|
@ -1099,6 +1100,12 @@ void ZapChan::answered()
|
|||
}
|
||||
m_timeout = 0;
|
||||
Output("Remote answered on zap/%d (%d/%d)",m_abschan,m_span->span(),m_chan);
|
||||
Message *m = new Message("answer");
|
||||
m->addParam("driver","zap");
|
||||
m->addParam("span",String(m_span->span()));
|
||||
m->addParam("channel",String(m_chan));
|
||||
m->addParam("status","answered");
|
||||
Engine::enqueue(m);
|
||||
}
|
||||
|
||||
void ZapChan::sendDigit(char digit)
|
||||
|
|
Loading…
Reference in New Issue