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; }
public Cdr(CDRRow pCdrRow) { if (pCdrRow == null) { throw new ArgumentNullException("pCdrRow"); } cdrRow = pCdrRow; }
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])); }
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; } }
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); }
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; }
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; } }
public void RemoveCDRRow(CDRRow row) { this.Rows.Remove(row); }
public void AddCDRRow(CDRRow row) { this.Rows.Add(row); }
public CDRRowChangeEvent(CDRRow row, DataRowAction action) { this.eventRow = row; this.eventAction = action; }