Esempio n. 1
0
        public Cdr(string pGuid, string pRawCdr, bool pDateLoggedFromCdr)
        {
            cdrRow                    = new CDRRow();
            cdrRow.Id                 = pGuid;
            cdrRow.ANI                = 0;
            cdrRow.DNIS               = 0;
            cdrRow.Price              = decimal.Zero;
            cdrRow.Cost               = decimal.Zero;
            cdrRow.End_user_price     = decimal.Zero;
            cdrRow.Used_bonus_minutes = 0;
            cdrRow.Prefix_in          = string.Empty;
            cdrRow.Prefix_out         = string.Empty;
            cdrRow.Local_number       = string.Empty;
            cdrRow.Node_id            = (new CurrentNode()).Id;

            sipUserId = string.Empty;
            alias     = string.Empty;

            //--preset Cdr fields, in case route == null
            CountryCode       = 0;
            LocalNumber       = string.Empty;
            CarrierRouteName  = "UNKNOWN";
            CustomerRouteName = "UNKNOWN";

            #region cdr format:

            //	0		2|																		//duration
            //	1		Wed. 09 Mar 2005 14:20:43 -0500|			//startDateTime
            //	2		Wed. 09 Mar 2005 14:20:45 -0500|			//StopDateTime
            //	3		192.168.1.4:1719|											//OrigIp
            //	4		8113_endp|														//callerID
            //	5		192.168.1.10:1720|										//TermIp
            //	6		8473_endp|														//calledID or S#:xxx
            //	7		01152222234567:dialedDigits|					//DestNumber
            //	8		|1112222															//ANI(ANI), orig Alias?
            //	9		|Gk Alias															//Gk Alias or DNIS:xxx;ANIxxx
            // 10		customer route id
            // 11		carrier route id
            // 12   customer route id
            // 13   carrier route id
            // 14   Release cause code
            // 15   Release source
            // 16   Rbr result
            // 17   Original Release cause code

            #endregion

            var _fields = pRawCdr.Split('|');

            //-- fields[0]: Call Duration
            cdrRow.Duration = Convert.ToInt16(_fields[0]);

            //-- fields[1]: start date/time
            var _startDateTime = _fields[1];

            //-- fields[2]: stop date/time
            var _endDateTime = _fields[2];

            cdrRow.Start      = getStandardDateTime(_startDateTime, _endDateTime);
            cdrRow.Timok_date = TimokDate.Parse(cdrRow.Start);

            //-- late logged
            if (pDateLoggedFromCdr)
            {
                cdrRow.Date_logged = cdrRow.Start.AddMinutes((cdrRow.Duration / 60) + (cdrRow.Duration % 60 > 0 ? 1 : 0));
            }
            else
            {
                var _dtNow = DateTime.Now;
                cdrRow.Date_logged = new DateTime(_dtNow.Year, _dtNow.Month, _dtNow.Day, _dtNow.Hour, _dtNow.Minute, 0);
            }

            //-- fields[3]: Orig ip address
            var _origIP = _fields[3].Substring(0, _fields[3].IndexOf(':'));
            cdrRow.Orig_IP_address = IPUtil.ToInt32(_origIP);
            OrigIP = _origIP;

            //-- fields[4]: sipUserId ( m_callerId )
            sipUserId = SIPHelper.GetUserId(_fields[4], TimokLogger.Instance.LogRbr);
            if (sipUserId.Length > 0)
            {
                alias = sipUserId;
            }

            //-- fields[5]: TermIP address
            //75|Wed, 07 Feb 2007 18:45:17 -0500|Wed, 07 Feb 2007 18:46:32 -0500|67.130.1.45:1276|8435225294:dialedDigits=8435225294 :h323_ID=id$8435225294:h323_ID=ip$67.130.1.40:h323_ID|67.130.1.31:1720|2486_endp|18128772101:dialedDigits|8435225294|MUNDETEL-SW1|0|10000|10000|1|10306|16|0|0|16;)
            var _indx = _fields[5].IndexOf(':');
            if (_indx > -1)
            {
                TermIP = _fields[5].Substring(0, _indx);
            }
            else
            {
                TermIP = _fields[5];
            }
            //-- This is because Gk sends HostIP address in the CalledIP field when Rbr did not find termination
            //-- we want to show 0.0.0.0 in cdr
            if (TermIP.CompareTo(Configuration.Instance.Main.HostIP) == 0)
            {
                TermIP = "0.0.0.0";
            }

            //-- fields[6]: m_calledId - check if SerialNumber present
            //NOTE: some h323 endpoints send orig alias here
            //alias = tryAlias(_fields[6]);
            cdrRow.Serial_number = trySerialNumber(_fields[6]);
            TimokLogger.Instance.LogRbr(LogSeverity.Debug, "Cdr.Ctor", string.Format("Is Serial# ? field[6]: {0}", _fields[6]));

            //-- fields[7]: Dest number
            //TimokLogger.Instance.LogDebug(string.Format("Is Dest# ? field[7]: {0}", _fields[7]));
            _indx = _fields[7].IndexOf(':');
            if (_indx > -1)
            {
                DestNumber = _fields[7].Substring(0, _indx);
            }
            else
            {
                DestNumber = _fields[7];
            }

            if (DestNumber == null)
            {
                DestNumber = string.Empty;
            }

            //if (DestNumber.Length > 0) {
            //  CountryCode = int.Parse(DestNumber.Substring(0,1));
            //  LocalNumber = DestNumber.Substring(1);
            //}

            //-- fields[8]: ANI, Orig Alias
            //TimokLogger.Instance.LogDebug(string.Format("Is ANI/Alias ? field[8]: {0}", _fields[8]));

            /*
             * sourceAddress = 4 entries {
             * [0]=dialedDigits "3605759548"
             * [1]=h323_ID  11 characters {
             * 0033 0036 0030 0035 0037 0035 0039 0035   36057595
             * 0034 0038 0020                            48
             * }
             * [2]=h323_ID  13 characters {
             * 0069 0064 0024 0033 0036 0030 0035 0037   id$36057
             * 0035 0039 0035 0034 0038                  59548
             * }
             * [3]=h323_ID  14 characters {
             * 0069 0070 0024 0036 0037 002e 0031 0033   ip$67.13
             * 0030 002e 0031 002e 0034 0030             0.1.40
             * }
             * }
             * 75|Wed, 07 Feb 2007 18:45:17 -0500|Wed, 07 Feb 2007 18:46:32 -0500|67.130.1.45:1276|8435225294:dialedDigits=8435225294 :h323_ID=id$8435225294:h323_ID=ip$67.130.1.40:h323_ID|67.130.1.31:1720|2486_endp|18128772101:dialedDigits|8435225294|MUNDETEL-SW1|0|10000|10000|1|10306|16|0|0|16;)
             */
            var _subFields = _fields[8].Split('=');
            foreach (var _subfield in _subFields)
            {
                if (alias.Length == 0)
                {
                    alias = tryAlias(_subfield);
                    if (alias.Length > 0)
                    {
                        continue;
                    }
                }
                if (cdrRow.ANI == 0)
                {
                    cdrRow.ANI = tryANI(_subfield);
                    if (cdrRow.ANI > 0)
                    {
                        continue;
                    }
                }
            }

            //-- fields[9]: Gk Alias - check if DNIS is here
            cdrRow.DNIS = tryDNIS(_fields[9]);
            //TimokLogger.Instance.LogDebug(string.Format("Is DNIS ? field[9]: {0}", _fields[9]));

            //-- fields[10]: retail acct id
            try {
                cdrRow.Retail_acct_id = int.Parse(_fields[10]);
            }
            catch {
                cdrRow.Retail_acct_id = 0;
            }
            //TimokLogger.Instance.LogDebug(string.Format("Is RetailAcct ? field[10]: {0}", _fields[10]));

            //-- fields[11]: customer acct id
            try {
                cdrRow.Customer_acct_id = short.Parse(_fields[11]);
            }
            catch {
                cdrRow.Customer_acct_id = 0;
            }
            //TimokLogger.Instance.LogDebug(string.Format("Is CustomerAcct ? field[11]: {0}", _fields[11]));

            //-- fields[12]: carrier routaccte id
            try {
                cdrRow.Carrier_acct_id = short.Parse(_fields[12]);
            }
            catch {
                cdrRow.Carrier_acct_id = 0;
            }
            //TimokLogger.Instance.LogDebug(string.Format("Is CarrierAcct ? field[12]: {0}", _fields[12]));

            //-- fields[13]: customer route id
            try {
                cdrRow.Customer_route_id = int.Parse(_fields[13]);
            }
            catch {
                cdrRow.Customer_route_id = 0;
            }
            //TimokLogger.Instance.LogDebug(string.Format("Is CustomerRoute ? field[13]: {0}", _fields[13]));

            //-- fields[14]: carrier route id
            try {
                cdrRow.Carrier_route_id = int.Parse(_fields[14]);
            }
            catch {
                cdrRow.Carrier_route_id = 0;
            }
            //TimokLogger.Instance.LogDebug(string.Format("Is CarrierAcct ? field[14]: {0}", _fields[14]));

            //-- fields[15]: Release cause code
            var _causeStr = _fields[15];
            //TimokLogger.Instance.LogDebug(string.Format("Is DisconnectCause ? field[15]: {0}", _fields[15]));
            try {
                cdrRow.Disconnect_cause = short.Parse(_causeStr);
            }
            catch {
                cdrRow.Disconnect_cause = (short)GkDisconnectCause.Unknown;
            }

            //-- fields[16]: Release source
            var _sourceStr = _fields[16];
            //TimokLogger.Instance.LogDebug(string.Format("Is SourceStr ? field[16]: {0}", _fields[16]));
            try {
                cdrRow.Disconnect_source = byte.Parse(_sourceStr);
            }
            catch {
                cdrRow.Disconnect_source = (byte)GkDisconnectSource.Unknown;
            }

            //-- fields[17]: Rbr result
            var _rbrResultStr = _fields[17];
            //TimokLogger.Instance.LogDebug(string.Format("Is RbrResult ? field[17]: {0}", _fields[17]));
            try {
                cdrRow.Rbr_result = short.Parse(_rbrResultStr);
            }
            catch {
                cdrRow.Rbr_result = (short)RbrResult.Unknown;
            }

            //-- fields[18]: Original Release cause code
            //TimokLogger.Instance.LogDebug(string.Format("Is MappedCauseStr ? field[18]: {0}", _fields[18]));
            try {
                cdrRow.Mapped_disconnect_cause = short.Parse(_fields[18]);
            }
            catch {
                cdrRow.Mapped_disconnect_cause = (short)GkDisconnectCause.Unknown;
            }

            //-- fields[19]: Original Release cause code
            //TimokLogger.Instance.LogDebug(string.Format("Is InfoDigits ? field[19]: {0}", _fields[19]));
            string _infoDigits = _fields[19].TrimEnd(';');
            try {
                cdrRow.Info_digits = byte.Parse(_infoDigits);
            }
            catch {
                cdrRow.Info_digits = 0;
            }
        }
Esempio n. 2
0
        public void TestGetIPAddress()
        {
            string _ip = SIPHelper.GetIPAddress("ip$192.168.1.1");

            Assert.IsTrue("192.168.1.1" == _ip);
        }