Example #1
0
 public Cdr(string pCallId, string pOrigIP, string pPrefixIn, string pDestNumber, short pCustomerAcctId, int pCustomerRouteId)
 {
     cdrRow                         = new CDRRow();
     cdrRow.Id                      = pCallId;
     cdrRow.Start                   = DateTime.Now;
     cdrRow.Date_logged             = cdrRow.Start;
     cdrRow.Timok_date              = TimokDate.Parse(cdrRow.Start);
     cdrRow.Duration                = 0;
     cdrRow.Customer_duration       = 0;
     cdrRow.Retail_duration         = 0;
     cdrRow.Carrier_duration        = 0;
     cdrRow.Ccode                   = 0;
     cdrRow.Local_number            = pDestNumber;
     cdrRow.Carrier_route_id        = 0;
     cdrRow.Customer_route_id       = pCustomerRouteId;
     cdrRow.Price                   = (decimal)0.0;
     cdrRow.Cost                    = (decimal)0.0;
     cdrRow.Orig_IP_address         = IPUtil.ToInt32(pOrigIP);
     OrigIP                         = IPUtil.ToString(cdrRow.Orig_IP_address);
     cdrRow.Term_end_point_id       = 0;
     cdrRow.Customer_acct_id        = pCustomerAcctId;
     cdrRow.Carrier_acct_id         = 0;
     cdrRow.Disconnect_cause        = 0;
     cdrRow.Mapped_disconnect_cause = 0;
     cdrRow.Rbr_result              = (short)RbrResult.Unknown;
     cdrRow.Prefix_in               = pPrefixIn;
     cdrRow.Prefix_out              = string.Empty;
     cdrRow.DNIS                    = 0;
     cdrRow.ANI                     = 0;
     cdrRow.Serial_number           = 0;
     cdrRow.Used_bonus_minutes      = 0;
     cdrRow.Node_id                 = 0;
 }
Example #2
0
 public Cdr(CDRRow pCdrRow)
 {
     if (pCdrRow == null)
     {
         throw new ArgumentNullException("pCdrRow");
     }
     cdrRow = pCdrRow;
 }
Example #3
0
        public static Cdr Get(string pCallId)
        {
            var _callId = CDRRow.StripSpaces(pCallId);

            CDRRow[] _cdrRows;
            using (var _db = new Cdr_Db(DateTime.Now)) {
                _cdrRows = _db.CDRCollection.GetById(_callId);
            }
            if (_cdrRows == null)
            {
                throw new RbrException(RbrResult.Cdr_NotFound, "Cdr.Get", string.Format("CallId={0}", _callId));
            }
            if (_cdrRows.Length != 1)
            {
                throw new RbrException(RbrResult.Cdr_Unexpected, "Cdr.Get", string.Format("CallId={0}", _callId));
            }
            return(new Cdr(_cdrRows[0]));
        }
Example #4
0
 static void insert(Cdr_Db_Base pDb, CDRRow pCdrRow)
 {
     try {
         if (pCdrRow.Id != null && pCdrRow.Id.Length == 32)
         {
             var _cdrIdentityRow = pDb.CDRIdentityCollection.GetByPrimaryKey(pCdrRow.Id);
             if (_cdrIdentityRow != null)
             {
                 pCdrRow.Id = Guid.NewGuid().ToString("N");                         //NOTE: openh323 generates duplicate Guids?
             }
             _cdrIdentityRow = new CDRIdentityRow
             {
                 Id = pCdrRow.Id
             };
             pDb.CDRIdentityCollection.Insert(_cdrIdentityRow);
         }
         pDb.CDRCollection.Insert(pCdrRow);
     }
     catch {
         pDb.RollbackTransaction();
         throw;
     }
 }
Example #5
0
        private static RawCDRDto toRawCDR(CDRRow pCDRRow)
        {
            var _cdr = new RawCDRDto();

            _cdr.ANI = pCDRRow.ANI;
            _cdr.Carrier_route_id        = pCDRRow.Carrier_route_id;
            _cdr.Ccode                   = pCDRRow.Ccode;
            _cdr.Cost                    = pCDRRow.Cost;
            _cdr.Customer_acct_id        = pCDRRow.Customer_acct_id;
            _cdr.Customer_route_id       = pCDRRow.Customer_route_id;
            _cdr.Date_logged             = pCDRRow.Date_logged;
            _cdr.Disconnect_cause        = pCDRRow.Disconnect_cause;
            _cdr.Disconnect_source       = pCDRRow.Disconnect_source;
            _cdr.DNIS                    = pCDRRow.DNIS;
            _cdr.Duration                = pCDRRow.Duration;
            _cdr.End_user_price          = pCDRRow.End_user_price;
            _cdr.Local_number            = pCDRRow.Local_number;
            _cdr.Mapped_disconnect_cause = pCDRRow.Mapped_disconnect_cause;
            _cdr.Node_id                 = pCDRRow.Node_id;
            _cdr.Orig_IP_address         = pCDRRow.Orig_IP_address;
            _cdr.Prefix_in               = pCDRRow.Prefix_in;
            _cdr.Prefix_out              = pCDRRow.Prefix_out;
            _cdr.Price                   = pCDRRow.Price;
            _cdr.Rbr_result              = pCDRRow.Rbr_result;
            _cdr.Serial_number           = pCDRRow.Serial_number;
            _cdr.Start                   = pCDRRow.Start;
            _cdr.Term_end_point_id       = pCDRRow.Term_end_point_id;
            _cdr.Timok_date              = pCDRRow.Timok_date;
            _cdr.Used_bonus_minutes      = pCDRRow.Used_bonus_minutes;
            _cdr.Customer_duration       = pCDRRow.Customer_duration;
            _cdr.Retail_acct_id          = pCDRRow.Retail_acct_id;
            _cdr.Reseller_price          = pCDRRow.Reseller_price;
            _cdr.Carrier_duration        = pCDRRow.Carrier_duration;
            _cdr.Retail_duration         = pCDRRow.Retail_duration;
            return(_cdr);
        }
Example #6
0
 public Cdr(CDRViewRow_Base pCdrViewRow)
 {
     if (pCdrViewRow == null)
     {
         throw new ArgumentNullException("pCdrViewRow");
     }
     cdrRow                         = new CDRRow();
     cdrRow.Start                   = pCdrViewRow.Start;
     cdrRow.Date_logged             = pCdrViewRow.Date_logged;
     cdrRow.Duration                = pCdrViewRow.Duration;
     cdrRow.Customer_duration       = pCdrViewRow.Customer_duration;
     cdrRow.Retail_duration         = pCdrViewRow.Retail_duration;
     cdrRow.Carrier_duration        = pCdrViewRow.Carrier_duration;
     cdrRow.Ccode                   = pCdrViewRow.Ccode;
     cdrRow.Local_number            = pCdrViewRow.Local_number;
     cdrRow.Carrier_route_id        = pCdrViewRow.Carrier_route_id;
     cdrRow.Customer_route_id       = pCdrViewRow.Customer_route_id;
     cdrRow.Price                   = pCdrViewRow.Price;
     cdrRow.Cost                    = pCdrViewRow.Cost;
     cdrRow.Orig_IP_address         = pCdrViewRow.Orig_IP_address;
     OrigIP                         = IPUtil.ToString(cdrRow.Orig_IP_address);
     cdrRow.Term_end_point_id       = pCdrViewRow.Term_end_point_id;
     cdrRow.Customer_acct_id        = pCdrViewRow.Customer_acct_id;
     cdrRow.Carrier_acct_id         = pCdrViewRow.Carrier_acct_id;
     cdrRow.Disconnect_cause        = pCdrViewRow.Disconnect_cause;
     cdrRow.Mapped_disconnect_cause = pCdrViewRow.Mapped_disconnect_cause;
     cdrRow.Rbr_result              = pCdrViewRow.Rbr_result;
     cdrRow.Prefix_in               = pCdrViewRow.Prefix_in;
     cdrRow.Prefix_out              = pCdrViewRow.Prefix_out;
     cdrRow.DNIS                    = pCdrViewRow.DNIS;
     cdrRow.ANI                     = pCdrViewRow.ANI;
     cdrRow.Serial_number           = pCdrViewRow.Serial_number;
     cdrRow.Used_bonus_minutes      = pCdrViewRow.Used_bonus_minutes;
     cdrRow.Node_id                 = pCdrViewRow.Node_id;
     cdrRow.Id                      = pCdrViewRow.Id;
 }
Example #7
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;
            }
        }
Example #8
0
 public void RemoveCDRRow(CDRRow row) {
     this.Rows.Remove(row);
 }
Example #9
0
 public void AddCDRRow(CDRRow row) {
     this.Rows.Add(row);
 }
Example #10
0
 public CDRRowChangeEvent(CDRRow row, DataRowAction action) {
     this.eventRow = row;
     this.eventAction = action;
 }