شركة التطبيقات المتكاملة لتصميم النظم البرمجية الخاصة ش.ش.و.

Integrated Applications Programming Company

Skip Navigation LinksHome » Code Library » Ims

Public general use code classes and xml files that we've compiled and used over the years:

Optical Fiber Network's Operations Support System Management Intranet (OFN OSS) support class for Huawei's Optical Fiber Network (OFN) data model

   1:  using Microsoft.EntityFrameworkCore;
   2:  using System;
   3:  using System.Collections.Generic;
   4:  using System.Linq;
   5:   
   6:  namespace Ia.Ngn.Cl.Model.Data.Huawei
   7:  {
   8:      ////////////////////////////////////////////////////////////////////////////
   9:   
  10:      /// <summary publish="true">
  11:      /// Optical Fiber Network's Operations Support System Management Intranet (OFN OSS) support class for Huawei's Optical Fiber Network (OFN) data model
  12:      /// </summary>
  13:      /// 
  14:      /// <remarks> 
  15:      /// Copyright © 2014-2020 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
  16:      ///
  17:      /// This library is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
  18:      /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
  19:      ///
  20:      /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
  21:      /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
  22:      /// 
  23:      /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
  24:      /// 
  25:      /// Copyright notice: This notice may not be removed or altered from any source distribution.
  26:      /// </remarks> 
  27:      public class Ims
  28:      {
  29:          ////////////////////////////////////////////////////////////////////////////
  30:   
  31:          /// <summary>
  32:          ///
  33:          /// </summary>
  34:          public Ims()
  35:          {
  36:          }
  37:   
  38:          ////////////////////////////////////////////////////////////////////////////
  39:   
  40:          /// <summary>
  41:          ///
  42:          /// </summary>
  43:          public static bool UpdateSbr(string impu, Ia.Ngn.Cl.Model.Huawei.HuSbr newHuSbr, Ia.Ngn.Cl.Model.Client.Huawei.Ims.ResultCode resultCode)
  44:          {
  45:              bool isOk;
  46:              Ia.Ngn.Cl.Model.Huawei.HuSbr huSbr;
  47:   
  48:              isOk = false;
  49:   
  50:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
  51:              {
  52:                  huSbr = (from s in db.HuSbrs where s.IMPU == impu select s).SingleOrDefault();
  53:   
  54:                  switch (resultCode)
  55:                  {
  56:                      case Ia.Ngn.Cl.Model.Client.Huawei.Ims.ResultCode.OperationSucceeded:
  57:                          {
  58:                              if (huSbr == null)
  59:                              {
  60:                                  newHuSbr.Created = newHuSbr.Updated = DateTime.UtcNow.AddHours(3);
  61:   
  62:                                  db.HuSbrs.Add(newHuSbr);
  63:                              }
  64:                              else
  65:                              {
  66:                                  if (huSbr.Update(newHuSbr))
  67:                                  {
  68:                                      db.HuSbrs.Attach(huSbr);
  69:                                      db.Entry(huSbr).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
  70:                                  }
  71:                              }
  72:   
  73:                              break;
  74:                          }
  75:                      case Ia.Ngn.Cl.Model.Client.Huawei.Ims.ResultCode.TheSubscriberIsNotDefinedInTheHssOrAtsOrServiceDataIsNotConfiguredForTheSubscriber:
  76:                      case Ia.Ngn.Cl.Model.Client.Huawei.Ims.ResultCode.NoServiceData:
  77:                          {
  78:                              if (huSbr == null) { }
  79:                              else db.HuSbrs.Remove(huSbr);
  80:   
  81:                              break;
  82:                          }
  83:                      default:
  84:                          {
  85:                              throw new Exception("Undefined result code seen in Ia.Ngn.Cl.Model.Client.Huawei.Ims.ResultCode");
  86:                          }
  87:                  }
  88:   
  89:                  db.SaveChanges();
  90:   
  91:                  isOk = true;
  92:              }
  93:   
  94:              return isOk;
  95:          }
  96:   
  97:          ////////////////////////////////////////////////////////////////////////////
  98:   
  99:          /// <summary>
 100:          ///
 101:          /// </summary>
 102:          public static bool UpdateOwsbr(string impu, Ia.Ngn.Cl.Model.Huawei.Owsbr newOwsbr, Ia.Ngn.Cl.Model.Client.Huawei.Ims.ResultCode resultCode)
 103:          {
 104:              bool isOk;
 105:              Ia.Ngn.Cl.Model.Huawei.Owsbr owsbr;
 106:   
 107:              isOk = false;
 108:   
 109:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 110:              {
 111:                  owsbr = (from o in db.Owsbrs where o.IMPU == impu select o).SingleOrDefault();
 112:   
 113:                  switch (resultCode)
 114:                  {
 115:                      case Ia.Ngn.Cl.Model.Client.Huawei.Ims.ResultCode.OperationSucceeded:
 116:                          {
 117:                              if (owsbr == null)
 118:                              {
 119:                                  newOwsbr.Created = newOwsbr.Updated = DateTime.UtcNow.AddHours(3);
 120:   
 121:                                  db.Owsbrs.Add(newOwsbr);
 122:                              }
 123:                              else
 124:                              {
 125:                                  if (owsbr.Update(newOwsbr))
 126:                                  {
 127:                                      db.Owsbrs.Attach(owsbr);
 128:                                      db.Entry(owsbr).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
 129:                                  }
 130:                              }
 131:   
 132:                              break;
 133:                          }
 134:                      case Ia.Ngn.Cl.Model.Client.Huawei.Ims.ResultCode.TheSubscriberIsNotDefinedInTheHssOrAtsOrServiceDataIsNotConfiguredForTheSubscriber:
 135:                      case Ia.Ngn.Cl.Model.Client.Huawei.Ims.ResultCode.NoServiceData:
 136:                          {
 137:                              if (owsbr == null) { }
 138:                              else db.Owsbrs.Remove(owsbr);
 139:   
 140:                              break;
 141:                          }
 142:                      default:
 143:                          {
 144:                              throw new Exception("Undefined result code seen in Ia.Ngn.Cl.Model.Client.Huawei.Ims.ResultCode");
 145:                          }
 146:                  }
 147:   
 148:                  db.SaveChanges();
 149:   
 150:                  isOk = true;
 151:              }
 152:   
 153:              return isOk;
 154:          }
 155:   
 156:          ////////////////////////////////////////////////////////////////////////////
 157:   
 158:          /// <summary>
 159:          ///
 160:          /// </summary>
 161:          public static bool UpdateServiceForSbr(string impu, string accessId)
 162:          {
 163:              bool insert, update, delete;
 164:              int number, serviceType;
 165:              string serviceId, service, impi, impuAid;//, prividUser;
 166:              Ia.Ngn.Cl.Model.Service2 service2, newService;
 167:              Ia.Ngn.Cl.Model.Huawei.HuSbr sbr;
 168:   
 169:              insert = update = delete = false;
 170:              //result = new Ia.Cl.Model.Result();
 171:   
 172:              number = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Number(impu);
 173:              impi = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Impi(impu);
 174:              impuAid = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.ImpuAid(impu);
 175:   
 176:              service = number.ToString();
 177:   
 178:              serviceType = Ia.Ngn.Cl.Model.Business.Service.ServiceType.ImsService;
 179:              serviceId = Ia.Ngn.Cl.Model.Business.Service2.ServiceId(service, serviceType);
 180:   
 181:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 182:              {
 183:                  sbr = (from s in db.HuSbrs where s.IMPU == impu select s).SingleOrDefault();
 184:   
 185:                  if (sbr != null)
 186:                  {
 187:                      newService = new Ia.Ngn.Cl.Model.Service2();
 188:   
 189:                      newService.Id = serviceId;
 190:                      newService.AreaCode = Ia.Ngn.Cl.Model.Business.Service.CountryCode;
 191:                      newService.Service = service;
 192:                      newService.ServiceType = serviceType;
 193:   
 194:                      //newService.Port = "Hu?";
 195:   
 196:                      newService.AbbriviatedCalling = sbr.NSABRC;
 197:                      newService.CallerId = sbr.NSCLIP;
 198:                      newService.CallForwarding = sbr.NSCFU;
 199:                      newService.CallWaiting = sbr.NSCW;
 200:                      newService.ConferenceCall = sbr.NS3PTY;
 201:   
 202:                      newService.AlarmCall = sbr.NSWAKE_UP;
 203:                      newService.WakeupCall = sbr.NSWAKE_UP;
 204:   
 205:                      newService.InternationalCallingUserControlled = sbr.NSCBA;
 206:                      newService.InternationalCalling = sbr.ITT;
 207:   
 208:                      //newService.ServiceSuspension = sbr.NSWAKE_UP;
 209:   
 210:                      newService.Pin = (int.TryParse(sbr.COP, out int i)) ? i : 0;
 211:   
 212:                      if (!string.IsNullOrEmpty(accessId)) newService.Access = (from a in db.Accesses where a.Id == accessId select a).SingleOrDefault();
 213:                      else newService.Access = null;
 214:   
 215:                      service2 = (from s in db.Service2
 216:                                  where s.ServiceType == Ia.Ngn.Cl.Model.Business.Service.ServiceType.ImsService && s.Id == newService.Id
 217:                                  select s).SingleOrDefault();
 218:   
 219:                      if (service2 == null)
 220:                      {
 221:                          newService.Created = newService.Updated = DateTime.UtcNow.AddHours(3);
 222:                          db.Service2.Add(newService);
 223:   
 224:                          insert = true;
 225:                      }
 226:                      else
 227:                      {
 228:                          if (service2.Update(newService))
 229:                          {
 230:                              db.Service2.Attach(service2);
 231:                              db.Entry(service2).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
 232:   
 233:                              update = true;
 234:                          }
 235:                          else update = false;
 236:                      }
 237:                  }
 238:                  else
 239:                  {
 240:                      service2 = (from s in db.Service2
 241:                                  where s.ServiceType == Ia.Ngn.Cl.Model.Business.Service.ServiceType.ImsService && s.Id == serviceId
 242:                                  select s).SingleOrDefault();
 243:   
 244:                      if (service2 != null)
 245:                      {
 246:                          db.Service2.Remove(service2);
 247:   
 248:                          delete = true;
 249:                      }
 250:                  }
 251:   
 252:                  db.SaveChanges();
 253:              }
 254:   
 255:              //result.AddSuccess(service + ": state: " + Ia.Ngn.Cl.Model.Ui.Text.ExpressionOfInsertOrUpdateOrDelete(insert, update, delete));
 256:   
 257:              return insert || update || delete;
 258:          }
 259:   
 260:          ////////////////////////////////////////////////////////////////////////////
 261:   
 262:          /// <summary>
 263:          ///
 264:          /// </summary>
 265:          public static bool UpdateServiceServiceSuspensionForOwsbr(string impu, out Ia.Cl.Model.Result result)
 266:          {
 267:              bool isOk, serviceSuspensionState;
 268:              int n, serviceType;
 269:              string serviceId;
 270:              Ia.Ngn.Cl.Model.Service2 service;
 271:              Ia.Ngn.Cl.Model.Huawei.Owsbr owsbr;
 272:   
 273:              isOk = false;
 274:              serviceType = Ia.Ngn.Cl.Model.Business.Service.ServiceType.ImsService;
 275:              result = new Ia.Cl.Model.Result();
 276:   
 277:              n = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.Number(impu);
 278:              serviceId = Ia.Ngn.Cl.Model.Business.Service2.ServiceId(n.ToString(), serviceType);
 279:   
 280:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 281:              {
 282:                  owsbr = (from o in db.Owsbrs where o.IMPU == impu select o).SingleOrDefault();
 283:   
 284:                  if (owsbr != null)
 285:                  {
 286:                      service = (from s in db.Service2
 287:                                 where s.ServiceType == Ia.Ngn.Cl.Model.Business.Service.ServiceType.ImsService && s.Id == serviceId
 288:                                 select s).SingleOrDefault();
 289:   
 290:                      if (service != null)
 291:                      {
 292:                          serviceSuspensionState = Ia.Ngn.Cl.Model.Business.Huawei.Owsbr.ServiceSuspensionState(owsbr);
 293:   
 294:                          if (service.ServiceSuspension != serviceSuspensionState)
 295:                          {
 296:                              service.ServiceSuspension = serviceSuspensionState;
 297:                              //service.UserId = userId;
 298:   
 299:                              db.Service2.Attach(service);
 300:                              db.Entry(service).Property(u => u.ServiceSuspension).IsModified = true;
 301:   
 302:                              db.SaveChanges();
 303:   
 304:                              result.AddSuccess("ServiceSuspension updated. ");
 305:                          }
 306:                          else
 307:                          {
 308:                              result.AddWarning("Warning: ServiceRequestService ServiceSuspension value was not updated because its the same. ");
 309:                          }
 310:                      }
 311:                      else
 312:                      {
 313:                          result.AddError("Error: serviceRequestService is null. ");
 314:                      }
 315:   
 316:                      db.SaveChanges();
 317:   
 318:                      isOk = true;
 319:                  }
 320:                  else
 321:                  {
 322:                      result.AddError("Error: owsbr is null. ");
 323:                  }
 324:              }
 325:   
 326:              return isOk;
 327:          }
 328:   
 329:          ////////////////////////////////////////////////////////////////////////////
 330:   
 331:          /// <summary>
 332:          ///
 333:          /// </summary>
 334:          public static bool CreateSubscriber(Ia.Ngn.Cl.Model.Client.Huawei.Ims ims, string service, out string result)
 335:          {
 336:              bool subscriberCreated;
 337:              string resultCodeString;
 338:   
 339:              resultCodeString = string.Empty;
 340:   
 341:              // ME:name=techss;
 342:              // ADD HSDAINF:IMPI="+96522220000@ims.moc.kw",HUSERNAME="+96522220000@ims.moc.kw",PWD=admin,REALM="ims.moc.kw";
 343:              ims.AddHsdainf(service, out Client.Huawei.Ims.ResultCode addHsdainfResultCode);
 344:              resultCodeString += "AddHsdainf: " + addHsdainfResultCode.ToString() + ", ";
 345:   
 346:              // ADD HSUB:SUBID="+96522220000@ims.moc.kw",IMPI="+96522220000@ims.moc.kw",IMPU="sip:+96522220000@ims.moc.kw";
 347:              ims.AddHsub(service, out Client.Huawei.Ims.ResultCode addHsubResultCode);
 348:              resultCodeString += "AddHsub: " + addHsubResultCode.ToString() + ", ";
 349:   
 350:              // ADD HIMPU:IMPI="+96522220000@ims.moc.kw",IMPU="tel:+96522220000";
 351:              ims.AddHimpu(service, out Client.Huawei.Ims.ResultCode addHimpuResultCode);
 352:              resultCodeString += "AddHimpu: " + addHimpuResultCode.ToString() + ", ";
 353:   
 354:              // SET HREGAUTH:IMPU="sip:+96522220000@ims.moc.kw",REGAUTH=TRUE;
 355:              ims.SetHregauth(service, out Client.Huawei.Ims.ResultCode setHregauthResultCode);
 356:              resultCodeString += "SetHregauth: " + setHregauthResultCode.ToString() + ", ";
 357:   
 358:              // SET HVNTPLID: IMPU="sip:+96522220000@ims.moc.kw", VNTPLID=0;
 359:              ims.SetHvntplidForImpuSipDomain(service, out Client.Huawei.Ims.ResultCode setHvntplidForImpuSipDomainResultCode);
 360:              resultCodeString += "SetHvntplidForImpuSipDomain: " + setHvntplidForImpuSipDomainResultCode.ToString() + ", ";
 361:   
 362:              // SET HVNTPLID: IMPU="tel:+96522220000", VNTPLID=0;
 363:              ims.SetHvntplidForImpu(service, out Client.Huawei.Ims.ResultCode setHvntplidForImpuResultCode);
 364:              resultCodeString += "SetHvntplidForImpu: " + setHvntplidForImpuResultCode.ToString() + ", ";
 365:   
 366:              // SET HIRS:IRSID=1,IMPULIST="\"sip:+96522220000@ims.moc.kw\"&\"tel:+96522220000\""; 
 367:              ims.SetHirs(service, out Client.Huawei.Ims.ResultCode setHirsResultCode);
 368:              resultCodeString += "SetHirs: " + setHirsResultCode.ToString() + ", ";
 369:   
 370:              // SET HDEFIMPU: IRSID=1, IMPU="sip:+96522220000@ims.moc.kw";
 371:              ims.SetHdefimpu(service, out Client.Huawei.Ims.ResultCode setHdefimpuResultCode);
 372:              resultCodeString += "SetHdefimpu: " + setHdefimpuResultCode.ToString() + ", ";
 373:   
 374:              // SET HSPSHARE:BASEIMPU="sip:+96522220000@ims.moc.kw",IMPU="tel:+96522220000";
 375:              ims.SetHspshare(service, out Client.Huawei.Ims.ResultCode setHspshareResultCode);
 376:              resultCodeString += "SetHspshare: " + setHspshareResultCode.ToString() + ", ";
 377:   
 378:              // SET HALIASPU:ALIASID=1,IMPULIST="\"sip:+96522220000@ims.moc.kw\"&\"tel:+96522220000\"";
 379:              ims.SetHaliaspu(service, out Client.Huawei.Ims.ResultCode setHaliaspuResultCode);
 380:              resultCodeString += "SetHaliaspu: " + setHaliaspuResultCode.ToString() + ", ";
 381:   
 382:              // ADD HSIFC:IMPU="sip:+96522220000@ims.moc.kw",SIFCID=1;
 383:              ims.AddHsifc(service, out Client.Huawei.Ims.ResultCode addHsifcResultCode);
 384:              resultCodeString += "AddHsifc: " + addHsifcResultCode.ToString() + ", ";
 385:   
 386:              // ME:name=tecats0; 
 387:              // ADD SBR:IMPU="sip:+96522xxxxxx@ims.moc.kw",TEMPLATEIDX=65535,DSPIDX=65534,LP=0,CSC=0,UTYPE=1,VCCFLAG=0,VTFLAG=0,NSCFU=0,NSCFUVM=0,NSCFB=0,NSCFBVM=0,NSCFNR=0,NSCFNRVM=0,NSCFNL=0,NSCFNLVM=0,NSCD=0,NSCDVM=0,NSCFNRC=0,NSCFNRCVM=0,NSCLIP=0,NSCIDCW=0,NSRIO=0,NSCNIP=0,NSCLIR=0,NSRIP=0,NSCNIR=0,NSRID=0,NSNRID=0,NSRND=0,NSNRND=0,NSCW=0,NSCCW=0,NSOIP=0,NSACRM=0,NSGOIR=0,NSMOIR=0,NSTIP=0,NSTIR=0,NSOTIR=0,NSCLIPNOSCREENING=0,NSCR=0,NSWAKE_UP=0,NSAOC_D=0,NSAOC_E=0,NSXEXH=0,NSXEGJ=0,NSCWCFNR=0,NSIIFC=0,NSDN_CALL_OUT_BAR=0,NSCCBS=0,NSCCNR=0,NSCCBSR=0,NSCCNRR=0,NS3PTY=0,NSNPTY=0,NSDND=0,NSMCR=0,NSCBA=0,NSTMP_LIN=0,NSCODEC_CNTRL=0,NSMWI=0,NSDC=0,NSHOLD=0,NSECT=0,NSCFTB=0,NSDAN=0,NSSTOP_SECRET=0,NSMCID=0,NSEBO=0,NSICO=0,NSOUTG=0,NSINQYH=0,NSUINFO=0,NSDN_CALL_OUT_ALLOW=0,NSSIC=0,NSSOC=0,NSSETCFNRTIME=0,NSCFS=0,NSCFSB=0,NSFAX=0,NSABRC=0,NSACRTOVM=0,NSPREPAID=0,NSCRBT=0,NSICB=0,NSMRINGING=0,NSCIS=0,NSCBEG=0,NSCOLP=0,NSCOLR=0,NSCOLPOVR=0,NSBAOC=0,NSBOIC=0,NSBOICEXHC=0,NSBAIC=0,NSBICROM=0,NSSPEED_DIAL=0,NSSD1D=0,NSSD2D=0,NSGRNCALL=0,NSCPARK=0,NSGAA=0,NSQSNS=0,NSMSN=0,NSHOTLINE=0,NSAOC_S=0,NSNIGHTSRV=0,NSBACKNUM=0,NSAUTOCON=0,NSCAMPON=0,NSCTD=0,NSCLICKHOLD=0,NSQUEUE=0,NSSANSWER=0,NSICENCF=0,NSCFGO=0,NSCECT=0,NSCTGO=0,NSCTIO=0,NSSETBUSY=0,NSOVERSTEP=0,NSABSENT=0,NSMONITOR=0,NSFMONITOR=0,NSDISCNT=0,NSFDISCNT=0,NSINSERT=0,NSFINSERT=0,NSASI=0,NSPWCB=0,NSRD=0,NSLCPS=0,NSNCPS=0,NSICPS=0,NSCBCLOCK=0,NSMINIBAR=0,NSMCN=0,NSDSTR=0,NSOPRREG=0,NSONEKEY=0,NSINBOUND=0,NSOUTBOUND=0,NSCALLERID=0,NSCUN=0,NSIPTVVC=0,NSNP=0,NSSEC=0,NSSECSTA=0,NSHRCN=0,NSSB=0,LCO=1,LC=1,LCT=1,NTT=1,ITT=0,ICTX=1,OCTX=1,INTT=0,IITT=0,ICLT=0,ICDDD=0,ICIDD=0,IOLT=0,CTLCO=1,CTLCT=1,CTLD=1,CTINTNANP=1,CTINTWORLD=1,CTDA=1,CTOSM=1,CTOSP=0,CTOSP1=0,CCO1=0,CCO2=0,CCO3=0,CCO4=0,CCO5=0,CCO6=0,CCO7=0,CCO8=0,CCO9=0,CCO10=0,CCO11=0,CCO12=0,CCO13=0,CCO14=0,CCO15=0,CCO16=0,HIGHENTCO=0,OPERATOR=1,SUPYSRV=1,IDDCI=1,NTCI=1,LTCI=1,RSC=65535,CIG=4294967295,OUTRST=0,INRST=0,NOAT=20,VMAIND=65535,VDMAIND=65535,TGRP=65534,TIDHLD=28,TIDCW=23,SCF=0,LMTGRP=65534,FLBGRP=65535,SLBGRP=65535,COP="0000",G711_64K_A_LAW=1,G711_64K_U_LAW=1,G722=1,G723=1,G726=1,G728=1,G729=1,CODEC_MP4A=1,CODEC2833=1,CODEC2198=1,G726_40=1,G726_32=1,G726_24=1,G726_16=1,AMR=1,CLEARMODE=1,ILBC=1,SPEEX=1,G729EV=1,EVRC=1,EVRCB=1,H261=1,H263=1,CODEC_MP4V=1,H264=1,T38=1,T120=1,G711A_VBD=1,G711U_VBD=1,G726_VBD=1,G726_40_VBD=1,G726_32_VBD=1,G726_24_VBD=1,G726_16_VBD=1,WIND_BAND_AMR=1,GSM610=1,H263_2000=1,BROADVOICE_32=1,UNKNOWN_CODEC=1,ACODEC=255,VCODEC=255,POLIDX=255,NCPI=255,ICPI=255,EBOCL=0,EBOPL=0,EBOIT=2,RM=0,CPC=0,PCHG=65535,TFPT=4,CHT=0,MCIDMODE=0,MCIDCMODE=255,MCIDAMODE=0,PREPAIDIDX=65535,CRBTID=65535,ODBBICTYPE=0,ODBBOCTYPE=0,ODBBARTYPE=0,ODBSS=0,ODBBRCFTYPE=0,PNOTI=0,MAXPARACALL=1,ATSDTMBUSY=1,CALLCOUNT=1,CDNOTICALLER=0,ISCHGFLAG=0,CHC=0,CUSER=0,STCF=0,CHARSC=65535,REGUIDX=0,SOCBFUNC=255,SOCBPTONEIDX=65535,ADMINCBA=0,ADCONTROL_DIVERSION=0,CPCRUS=255,CUSCAT=0,SPT100REL=1;
 388:              ims.AddSbr(service, out Client.Huawei.Ims.ResultCode addSbrResultCode);
 389:              resultCodeString += "AddSbr: " + addSbrResultCode.ToString() + ", ";
 390:   
 391:              // ME:name=tecens; 
 392:              // ADD DNAPTRREC: NAME="0.0.0.0.2.2.2.2.5.6.9.e164.arpa", ZONENAME="5.6.9.e164.arpa", ORDER=0, PREFERENCE=10, FLAGS="U", SERVICE="E2U+sip", REGEXP="!^..*$!sip:+96522220000@ims.moc.kw!", REPLACEMENT="ims.moc.kw.";
 393:              ims.AddDnaptrrec(service, out Client.Huawei.Ims.ResultCode addDnaptrrecResultCode);
 394:              resultCodeString += "AddDnaptrrec: " + addDnaptrrecResultCode.ToString();
 395:   
 396:              if (true) // check that all is OK in CreateH248Subscriber part
 397:              {
 398:                  subscriberCreated = true;
 399:              }
 400:              else
 401:              {
 402:   
 403:              }
 404:   
 405:              result = "Create subscriber: " + service + ", resultCodeString: " + resultCodeString + ". ";
 406:   
 407:              return subscriberCreated;
 408:          }
 409:   
 410:          ////////////////////////////////////////////////////////////////////////////
 411:   
 412:          /// <summary>
 413:          ///
 414:          /// </summary>
 415:          public static void DeleteSubscriber(Ia.Ngn.Cl.Model.Client.Huawei.Ims ims, string service, out string result)
 416:          {
 417:              string resultCodeString;
 418:              Ia.Ngn.Cl.Model.Client.Huawei.Ims.ResultCode rmvDnaptrrecResultCode, rmvSbrResultCode, rmvHsubResultCode, rmvHsdainfResultCode;
 419:   
 420:              result = resultCodeString = string.Empty;
 421:   
 422:              // ME:name=tecens; 
 423:              // RMV DNAPTRREC: NAME="0.0.0.0.2.2.2.2.5.6.9.e164.arpa";
 424:              ims.RmvDnaptrrec(service, out rmvDnaptrrecResultCode);
 425:              resultCodeString += "RmvDnaptrrec: " + rmvDnaptrrecResultCode.ToString() + ", ";
 426:   
 427:              // ME:name=tecats0; 
 428:              // RMV SBR: IMPU="tel:+96522220000";
 429:              ims.RmvSbr(service, out rmvSbrResultCode);
 430:              resultCodeString += "RmvSbr: " + rmvSbrResultCode.ToString() + ", ";
 431:   
 432:              // ME:name=techss; 
 433:              // RMV HSUB: SUBID="+96522220000@ims.moc.kw";
 434:              ims.RmvHsub(service, out rmvHsubResultCode);
 435:              resultCodeString += "RmvHsub: " + rmvHsubResultCode.ToString() + ", ";
 436:   
 437:              // RMV HSDAINF: IMPI="+96522220000@ims.moc.kw";
 438:              ims.RmvHsdainf(service, out rmvHsdainfResultCode);
 439:              resultCodeString += "RmvHsdainf: " + rmvHsdainfResultCode.ToString();
 440:   
 441:              result = service + ", delete subscriber: " + resultCodeString + ". ";
 442:          }
 443:   
 444:          ////////////////////////////////////////////////////////////////////////////
 445:   
 446:          /// <summary>
 447:          ///
 448:          /// </summary>
 449:          public static void AssignSupplementaryService(Ia.Ngn.Cl.Model.Client.Huawei.Ims ims, string service, Ia.Ngn.Cl.Model.Business.Service.SupplementaryService supplementaryService, bool supplementaryServiceState, out string result)
 450:          {
 451:              string impu;
 452:              Ia.Ngn.Cl.Model.Client.Huawei.Ims.ResultCode resultCode;
 453:   
 454:              result = string.Empty;
 455:   
 456:              impu = Ia.Ngn.Cl.Model.Business.NumberFormatConverter.ImpuSipDomain(service);
 457:   
 458:              switch (supplementaryService)
 459:              {
 460:                  //newService.ServiceSuspension =;
 461:                  // newService.Pin = (int.TryParse(huSbr.COP, out i)) ? i : 0;
 462:   
 463:                  case (Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.AbbriviatedCalling):
 464:                      {
 465:                          ims.ModSbrNsabrc(service, supplementaryServiceState, out resultCode);
 466:                          result = service + ",AbbriviatedCalling: " + supplementaryServiceState.ToString().ToLower() + "," + resultCode.ToString();
 467:                          break;
 468:                      }
 469:                  case (Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.CallerId):
 470:                      {
 471:                          ims.ModSbrNsclip(service, supplementaryServiceState, out resultCode);
 472:                          result = service + ",CallerId: " + supplementaryServiceState.ToString().ToLower() + "," + resultCode.ToString();
 473:                          break;
 474:                      }
 475:                  case (Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.CallForwarding):
 476:                      {
 477:                          ims.ModSbrNscfu(service, supplementaryServiceState, out resultCode);
 478:                          result = service + ",CallForwarding: " + supplementaryServiceState.ToString().ToLower() + "," + resultCode.ToString();
 479:                          break;
 480:                      }
 481:                  case (Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.CallWaiting):
 482:                      {
 483:                          ims.ModSbrNscw(service, supplementaryServiceState, out resultCode);
 484:                          result = service + ",CallWaiting: " + supplementaryServiceState.ToString().ToLower() + "," + resultCode.ToString();
 485:                          break;
 486:                      }
 487:                  case (Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.ConferenceCall):
 488:                      {
 489:                          ims.ModSbrNs3pty(service, supplementaryServiceState, out resultCode);
 490:                          result = service + ",ConferenceCall: " + supplementaryServiceState.ToString().ToLower() + "," + resultCode.ToString();
 491:                          break;
 492:                      }
 493:                  case (Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.WakeupCall):
 494:                      {
 495:                          ims.ModSbrNswakeup(service, supplementaryServiceState, out resultCode);
 496:                          result = service + ",WakeupCall: " + supplementaryServiceState.ToString().ToLower() + "," + resultCode.ToString();
 497:                          break;
 498:                      }
 499:                  case (Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.InternationalCallingUserControlled):
 500:                      {
 501:                          ims.ModSbrNscba(service, supplementaryServiceState, out resultCode);
 502:                          result = service + ",InternationalCallingUserControlled: " + supplementaryServiceState.ToString().ToLower() + "," + resultCode.ToString();
 503:                          break;
 504:                      }
 505:                  case (Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.InternationalCalling):
 506:                      {
 507:                          ims.ModSbrItt(service, supplementaryServiceState, out resultCode);
 508:                          result = service + ",InternationalCalling: " + supplementaryServiceState.ToString().ToLower() + "," + resultCode.ToString();
 509:                          break;
 510:                      }
 511:                  case (Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.ServiceSuspension):
 512:                      {
 513:                          ims.SetOwSbr(service, supplementaryServiceState, out resultCode);
 514:                          result = service + ",ServiceSuspension: " + supplementaryServiceState.ToString().ToLower() + "," + resultCode.ToString();
 515:                          break;
 516:                      }
 517:                  default:
 518:                      {
 519:                          result = service + ",unknown SupplementaryService: " + supplementaryServiceState.ToString().ToLower();
 520:                          break;
 521:                      }
 522:              }
 523:          }
 524:   
 525:          ////////////////////////////////////////////////////////////////////////////
 526:   
 527:          /// <summary>
 528:          ///
 529:          /// </summary>
 530:          public static void AssignServiceSuspensionStateToServiceSubscriber(Ia.Ngn.Cl.Model.Client.Huawei.Ims client, string service, bool serviceSuspensionState, out string result)
 531:          {
 532:              Ia.Ngn.Cl.Model.Client.Huawei.Ims.ResultCode resultCode;
 533:   
 534:              client.SetOwSbr(service, serviceSuspensionState, out resultCode);
 535:   
 536:              result = service + ",service suspension: " + serviceSuspensionState.ToString().ToLower() + "," + resultCode.ToString();
 537:          }
 538:   
 539:          ////////////////////////////////////////////////////////////////////////////
 540:          ////////////////////////////////////////////////////////////////////////////
 541:   
 542:          /// <summary>
 543:          ///
 544:          /// </summary>
 545:          public static List<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont> NddOntInHuaweiSwitchNokiaAccessWithAccessList()
 546:          {
 547:              List<string> accessIdList;
 548:              List<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont> list;
 549:   
 550:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 551:              {
 552:                  var oltIdList = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.HuaweiSwitchNokiaAccessOltIdList;
 553:   
 554:                  accessIdList = (from a in db.Accesses where oltIdList.Contains(a.Olt) select a.Id).ToList();
 555:   
 556:                  list = (from o in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntList
 557:                          where o.Pon.PonGroup.Olt.Odf.Router.Vendor == Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor.Huawei
 558:                          && o.Pon.PonGroup.Olt.Odf.Vendor == Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor.Nokia
 559:                          && accessIdList.Contains(o.Access.Id)
 560:                          select o).ToList();
 561:              }
 562:   
 563:              return list;
 564:          }
 565:   
 566:          ////////////////////////////////////////////////////////////////////////////
 567:   
 568:          /// <summary>
 569:          ///
 570:          /// </summary>
 571:          public static List<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont> NddOntInHuaweiSwitchNokiaAccessList()
 572:          {
 573:              List<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont> list;
 574:   
 575:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 576:              {
 577:                  var oltIdList = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.HuaweiSwitchNokiaAccessOltIdList;
 578:   
 579:                  list = (from o in Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntList
 580:                          where o.Pon.PonGroup.Olt.Odf.Router.Vendor == Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor.Huawei
 581:                          && o.Pon.PonGroup.Olt.Odf.Vendor == Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor.Nokia
 582:                          select o).ToList();
 583:              }
 584:   
 585:              return list;
 586:          }
 587:   
 588:          ////////////////////////////////////////////////////////////////////////////
 589:   
 590:          /// <summary>
 591:          ///
 592:          /// </summary>
 593:          public static List<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont> NddHuaweiSwitchAndNokiaAccessOntWithAccessButNoMgwRecord()
 594:          {
 595:              List<string> accessIdList;
 596:              List<Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Ont> nddOntList, nddOntWithinAccessList;
 597:   
 598:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
 599:              {
 600:                  var oltIdList = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.HuaweiSwitchNokiaAccessOltIdList;
 601:   
 602:                  accessIdList = (from a in db.Accesses
 603:                                  where oltIdList.Contains(a.Olt)
 604:                                  select a.Id).AsNoTracking().ToList(); // change accessIdList to Dictionary
 605:   
 606:                  var ontList = Ia.Ngn.Cl.Model.Data.NetworkDesignDocument.OntList;
 607:   
 608:                  nddOntWithinAccessList = (from o in ontList
 609:                                            where o.Pon.PonGroup.Olt.Odf.Router.Vendor == Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor.Huawei
 610:                                            && o.Pon.PonGroup.Olt.Odf.Vendor == Ia.Ngn.Cl.Model.Business.NetworkDesignDocument.Vendor.Nokia
 611:                                            && accessIdList.Contains(o.Access.Id)
 612:                                            select o).ToList();
 613:   
 614:                  var mgwList = (from m in db.Mgws
 615:                                 select new { NetworkElement = m.NetworkElement, RA1 = m.RA1 }).AsNoTracking().ToList();
 616:   
 617:                  // below: ONTs in Accesses but not in Mgws list
 618:                  var tecNddOntList = (from no in nddOntWithinAccessList
 619:                                       join m in mgwList.Where(u => u.NetworkElement == Ia.Ngn.Cl.Model.Business.Huawei.SoftX.TecNetworkElement.Domain) on no.Ip equals m.RA1
 620:                                       into gj
 621:                                       from sub in gj.DefaultIfEmpty()
 622:                                       where sub == null
 623:                                       select no).ToList();
 624:   
 625:                  var skbNddOntList = (from no in nddOntWithinAccessList
 626:                                       join m in mgwList.Where(u => u.NetworkElement == Ia.Ngn.Cl.Model.Business.Huawei.SoftX.SkbNetworkElement.Domain) on no.Ip equals m.RA1
 627:                                       into gj
 628:                                       from sub in gj.DefaultIfEmpty()
 629:                                       where sub == null
 630:                                       select no).ToList();
 631:   
 632:                  //nddOntList = tecNddOntList.Except(skbNddOntList).Union(skbNddOntList.Except(tecNddOntList)).ToList();
 633:                  nddOntList = tecNddOntList.Union(skbNddOntList).ToList();
 634:              }
 635:   
 636:              return nddOntList;
 637:          }
 638:   
 639:          ////////////////////////////////////////////////////////////////////////////
 640:          ////////////////////////////////////////////////////////////////////////////
 641:      }
 642:   
 643:      ////////////////////////////////////////////////////////////////////////////
 644:      ////////////////////////////////////////////////////////////////////////////
 645:  }