Ok, I'm a little stompped here, but I guess one of the "older" hackerz around can lend a hand. I've been going over the Radius information returned from GnuGK to the Radius Server, and to be honest, most of the information is in there. However, I've noticed that one important field is missing, well, at least if you wanna debug stuff via your radius server.
Lets examine how GnuGK logs disconnect causes into the log file:
2004/01/12 16:14:37.746 4 ProxyChannel.cxx(373) Q931 Received: { q931pdu = { protocolDiscriminator = 8 callReference = 14794 from = originator messageType = ReleaseComplete IE: Cause - No circuit/channel available = { 80 a2 .. } IE: User-User = { 25 80 06 00 08 91 4a 00 03 0b 18 11 00 34 30 30 %.....J......400 32 63 63 66 30 66 66 66 66 65 38 36 33 01 00 01 2ccf0ffffe863... 00 08 80 01 00 ..... } } h225pdu = { h323_uu_pdu = { h323_message_body = releaseComplete { protocolIdentifier = 0.0.8.2250.0.3 callIdentifier = { guid = 16 octets { 34 30 30 32 63 63 66 30 66 66 66 66 65 38 36 33 4002ccf0ffffe863 } } presentationIndicator = presentationAllowed <<null>> screeningIndicator = userProvidedNotScreened } h245Tunneling = FALSE } } }
Right after this DC messages, a CDR is created. Now, in Radius all you get is:
h323-setup-time = "h323-setup-time=09:37:52.000 GMT Tue Jan 13 2004" h323-disconnect-time = "h323-disconnect-time=09:37:56.000 GMT Tue Jan 13 2004" h323-disconnect-cause = "h323-disconnect-cause=22"
Now, I'm missing just a very small part of the information that is provided above, which is the "from =" field. Now, I've managed to dig around the source and understand that I would need to add a method to the CallRec class, to get this field then change the following part of GkAcctLogger::Status RadAcct::LogAcctEvent to look something like this:
if( evt & AcctStop ) { tm = call->GetDisconnectTime();
// New information to be added to CallRec dcorigin = call->GetDisconnectOrigin();
if( tm != 0 ) *pdu += new RadiusAttr(PString("h323-disconnect-time=")+ AsString(tm),CiscoVendorId, 29); *pdu += new RadiusAttr(PString("h323-disconnect-cause=")+ PString(PString::Unsigned, (long)(call->GetDisconnectCause()), 16 ), CiscoVendorId, 30); // New field here *pdu += new RadiusAttr(PString("h323-disconnect-origin=")+ AsString(dcorigin), [have no idea what to put here yet], [neither here]); }
Again, I may be barking up the wrong tree here, but I think that many people would really like to have this information available for Radius.
-- __________________________________________________________________ Nir Simionovich IT Manager m-Wise Ltd. e-Mail: nirs@m-wise.com cell: +972-54-482826
------------------------------------------------------- This SF.net email is sponsored by: Perforce Software. Perforce is the Fast Software Configuration Management System offering advanced branching capabilities and atomic changes on 50+ platforms. Free Eval! http://www.perforce.com/perforce/loadprog.html _______________________________________________ List: Openh323gk-users@lists.sourceforge.net Archive: http://sourceforge.net/mailarchive/forum.php?forum_id=8549 Homepage: http://www.gnugk.org/