)>}]
شركة التطبيقات المتكاملة لتصميم وبرمجة البرمجيات الخاصة ش.ش.و.
Integrated Applications Programming Company
Skip Navigation Links

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

Nokia's Siemens EWSD support class of Next Generation Network'a (NGN's) data model.

   1:  using System;
   2:  using System.Linq;
   3:  using System.Text.RegularExpressions;
   4:   
   5:  namespace Ia.Ngn.Cl.Model.Data.Nokia
   6:  {
   7:      ////////////////////////////////////////////////////////////////////////////
   8:   
   9:      /// <summary publish="true">
  10:      /// Nokia's Siemens EWSD support class of Next Generation Network'a (NGN's) data model.
  11:      /// </summary>
  12:      /// 
  13:      /// <remarks> 
  14:      /// Copyright © 2006-2019 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
  15:      ///
  16:      /// 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
  17:      /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
  18:      ///
  19:      /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
  20:      /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
  21:      /// 
  22:      /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
  23:      /// 
  24:      /// Copyright notice: This notice may not be removed or altered from any source distribution.
  25:      /// </remarks> 
  26:      public class SiemensEwsd
  27:      {
  28:          ////////////////////////////////////////////////////////////////////////////
  29:   
  30:          /// <summary>
  31:          ///
  32:          /// </summary>
  33:          public SiemensEwsd() { }
  34:   
  35:          ////////////////////////////////////////////////////////////////////////////
  36:   
  37:          /// <summary>
  38:          ///
  39:          /// </summary>
  40:          public static bool UpdateDatabaseWithEwsdCommandOutput(string fileContent, out Ia.Cl.Model.Result result)
  41:          {
  42:              bool b;
  43:              Ia.Ngn.Cl.Model.Business.Nokia.SiemensEwsd.Response response;
  44:   
  45:              b = false;
  46:              result = new Ia.Cl.Model.Result();
  47:   
  48:              response = Ia.Ngn.Cl.Model.Data.Nokia.SiemensEwsd.ParseResponse(fileContent);
  49:   
  50:              if (response.ReturnCode == Ia.Ngn.Cl.Model.Business.Nokia.SiemensEwsd.ResultCode.OperationIsSuccessful
  51:                  || response.ReturnCode == Ia.Ngn.Cl.Model.Business.Nokia.SiemensEwsd.ResultCode.ObjectNotASubscriber
  52:                  || response.ReturnCode == Ia.Ngn.Cl.Model.Business.Nokia.SiemensEwsd.ResultCode.ObjectNotConnected
  53:                  )
  54:              {
  55:                  if (response.CommandString.StartsWith("DISPSUB:"))
  56:                  {
  57:                      b = Ia.Ngn.Cl.Model.Data.Nokia.SiemensEwsd.UpdateServiceFromSiemensEwsdResponse(response, out result);
  58:                  }
  59:                  else if (response.CommandString.StartsWith("DISPTIME;"))
  60:                  {
  61:                      result.AddSuccess(response.DateTime.ToString("yyyy-MM-dd hh:mm:ss"));
  62:                  }
  63:                  else
  64:                  {
  65:                      result.AddWarning("No designated opcode to process. ");
  66:   
  67:                      b = false;
  68:                  }
  69:              }
  70:              else
  71:              {
  72:                  result.AddError("Operation failed. ");
  73:   
  74:                  b = false;
  75:              }
  76:   
  77:              return b;
  78:          }
  79:   
  80:          ////////////////////////////////////////////////////////////////////////////
  81:   
  82:          /// <summary>
  83:          ///
  84:          /// </summary>
  85:          public static bool UpdateServiceFromSiemensEwsdResponse(Ia.Ngn.Cl.Model.Business.Nokia.SiemensEwsd.Response response, out Ia.Cl.Model.Result result)
  86:          {
  87:              bool insert, update, delete;
  88:              int serviceType;
  89:              string serviceId, service;
  90:              Ia.Ngn.Cl.Model.Service2 service2, newService;
  91:   
  92:              insert = update = delete = false;
  93:              result = new Ia.Cl.Model.Result();
  94:   
  95:              service = response.Service.ToString();
  96:   
  97:              using (var db = new Ia.Ngn.Cl.Model.Ngn())
  98:              {
  99:                  serviceType = Ia.Ngn.Cl.Model.Business.Service.ServiceType.PstnService;
 100:                  serviceId = Ia.Ngn.Cl.Model.Business.Service2.ServiceId(service, serviceType);
 101:   
 102:                  if (response.IsProvisioned)
 103:                  {
 104:                      newService = new Ia.Ngn.Cl.Model.Service2();
 105:   
 106:                      newService.Id = serviceId;
 107:                      newService.AreaCode = Ia.Ngn.Cl.Model.Business.Service.CountryCode;
 108:                      newService.Service = service;
 109:                      newService.ServiceType = serviceType;
 110:   
 111:                      if (response.ServiceSupplementaryService != null)
 112:                      {
 113:                          newService.CallerId = response.ServiceSupplementaryService.SupplementaryServiceList.Contains(Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.CallerId);
 114:                          newService.AbbriviatedCalling = response.ServiceSupplementaryService.SupplementaryServiceList.Contains(Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.AbbriviatedCalling);
 115:                          newService.CallForwarding = response.ServiceSupplementaryService.SupplementaryServiceList.Contains(Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.CallForwarding);
 116:                          newService.CallWaiting = response.ServiceSupplementaryService.SupplementaryServiceList.Contains(Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.CallWaiting);
 117:                          newService.ConferenceCall = response.ServiceSupplementaryService.SupplementaryServiceList.Contains(Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.ConferenceCall);
 118:                          newService.InternationalCalling = response.ServiceSupplementaryService.SupplementaryServiceList.Contains(Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.InternationalCalling);
 119:                          newService.InternationalCallingUserControlled = response.ServiceSupplementaryService.SupplementaryServiceList.Contains(Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.InternationalCallingUserControlled);
 120:   
 121:                          newService.AlarmCall = response.ServiceSupplementaryService.SupplementaryServiceList.Contains(Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.WakeupCall);
 122:                          newService.WakeupCall = response.ServiceSupplementaryService.SupplementaryServiceList.Contains(Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.WakeupCall);
 123:   
 124:                          newService.ServiceSuspension = response.ServiceSupplementaryService.SupplementaryServiceList.Contains(Ia.Ngn.Cl.Model.Business.Service.SupplementaryService.ServiceSuspension);
 125:                          //newService.CallBarring = subParty.ServiceSuspension;
 126:   
 127:                          newService.Pin = int.TryParse(response.ServiceSupplementaryService.Pin, out int i) ? i : 0;
 128:                      }
 129:   
 130:                      //if (nddOnt != null) newService.Access = (from a in db.Accesses where a.Id == nddOnt.Access.Id select a).SingleOrDefault();
 131:                      //else
 132:                      newService.Access = null;
 133:   
 134:                      service2 = (from s in db.Service2s
 135:                                  where s.ServiceType == Ia.Ngn.Cl.Model.Business.Service.ServiceType.PstnService && s.Id == newService.Id
 136:                                  select s).SingleOrDefault();
 137:   
 138:                      if (service2 == null)
 139:                      {
 140:                          newService.Created = newService.Updated = DateTime.UtcNow.AddHours(3);
 141:                          db.Service2s.Add(newService);
 142:   
 143:                          insert = true;
 144:                      }
 145:                      else
 146:                      {
 147:                          if (service2.Update(newService))
 148:                          {
 149:                              db.Service2s.Attach(service2);
 150:                              db.Entry(service2).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
 151:   
 152:                              update = true;
 153:                          }
 154:                          else update = false;
 155:                      }
 156:                  }
 157:                  else
 158:                  {
 159:                      service2 = (from s in db.Service2s
 160:                                  where s.ServiceType == Ia.Ngn.Cl.Model.Business.Service.ServiceType.PstnService && s.Id == serviceId
 161:                                  select s).SingleOrDefault();
 162:   
 163:                      if (service2 != null)
 164:                      {
 165:                          db.Service2s.Remove(service2);
 166:   
 167:                          delete = true;
 168:                      }
 169:                  }
 170:   
 171:                  db.SaveChanges();
 172:              }
 173:   
 174:              result.AddSuccess(service + ": state: " + Ia.Ngn.Cl.Model.Ui.Text.ExpressionOfInsertOrUpdateOrDelete(insert, update, delete));
 175:   
 176:              return insert || update || delete;
 177:          }
 178:   
 179:          ////////////////////////////////////////////////////////////////////////////
 180:   
 181:          /// <summary>
 182:          /// Parse response of Siemens EWSD
 183:          /// </summary>
 184:          private static Ia.Ngn.Cl.Model.Business.Nokia.SiemensEwsd.Response ParseResponse(string fileContent)
 185:          {
 186:              string service;
 187:              Match match;
 188:              Ia.Ngn.Cl.Model.Business.Service.ServiceSupplementaryService serviceSupplementaryService;
 189:              Ia.Ngn.Cl.Model.Business.Nokia.SiemensEwsd.ResultCode returnCode;
 190:              Ia.Ngn.Cl.Model.Business.Nokia.SiemensEwsd.Response response;
 191:   
 192:              response = new Ia.Ngn.Cl.Model.Business.Nokia.SiemensEwsd.Response();
 193:   
 194:              if (fileContent.Contains("OBJECT NOT A SUBSCRIBER"))
 195:              {
 196:                  // maybe a PBX?
 197:   
 198:                  /*
 199:  -----------------------------------------------------------------------------
 200:  
 201:  
 202:  7514
 203:  
 204:  COMMAND SUBMITTED
 205:  
 206:  
 207:  
 208:  
 209:   
 210:  7514                                                        MASKNO:10001 
 211:  COMMAND ERROR MESSAGE FOR DISPSUB      :  1 ERROR(S) 
 212:                                                              MASKNO:10990 
 213:  OBJECT NOT A SUBSCRIBER                                                 
 214:   
 215:  CNTXT PAR.NAME PARAMETER VALUE 
 216:  -----+--------+--------------------------------------------------------- 
 217:        DN       =<25410000>                                               
 218:  
 219:  
 220:  END JOB 7514
 221:  
 222:  
 223:  
 224:  -----------------------------------------------------------------------------
 225:  
 226:                   */
 227:   
 228:                  response.DateTime = DateTime.UtcNow.AddHours(3);
 229:   
 230:                  match = Regex.Match(fileContent, @"DN       =<(\d{8})>");
 231:   
 232:                  if (match.Success)
 233:                  {
 234:                      service = match.Groups[1].Value;
 235:   
 236:                      response.CommandString = @"DISPSUB:DN=" + service + ";";
 237:   
 238:                      response.Service = int.Parse(service);
 239:   
 240:                      response.IsProvisioned = true;
 241:   
 242:                      returnCode = Ia.Ngn.Cl.Model.Business.Nokia.SiemensEwsd.ResultCode.ObjectNotASubscriber;
 243:                  }
 244:                  else
 245:                  {
 246:                      returnCode = Ia.Ngn.Cl.Model.Business.Nokia.SiemensEwsd.ResultCode.OperationFailed;
 247:                  }
 248:              }
 249:              else if (fileContent.Contains("OBJECT NOT CONNECTED"))
 250:              {
 251:                  /*
 252:  
 253:  -----------------------------------------------------------------------------
 254:  
 255:  
 256:  6918
 257:  
 258:  COMMAND SUBMITTED
 259:  
 260:  
 261:  
 262:  
 263:   
 264:  6918                                                        MASKNO:10001 
 265:  COMMAND ERROR MESSAGE FOR DISPSUB      :  1 ERROR(S) 
 266:                                                              MASKNO:10990 
 267:  OBJECT NOT CONNECTED                                                    
 268:   
 269:  CNTXT PAR.NAME PARAMETER VALUE 
 270:  -----+--------+--------------------------------------------------------- 
 271:        DN       =<25410011>                                               
 272:  
 273:  
 274:  END JOB 6918
 275:  
 276:  
 277:  
 278:  -----------------------------------------------------------------------------
 279:                   */
 280:   
 281:                  response.DateTime = DateTime.UtcNow.AddHours(3);
 282:   
 283:                  match = Regex.Match(fileContent, @"DN       =<(\d{8})>");
 284:   
 285:                  if (match.Success)
 286:                  {
 287:                      service = match.Groups[1].Value;
 288:   
 289:                      response.CommandString = @"DISPSUB:DN=" + service + ";";
 290:   
 291:                      response.Service = int.Parse(service);
 292:   
 293:                      response.IsProvisioned = false;
 294:   
 295:                      returnCode = Ia.Ngn.Cl.Model.Business.Nokia.SiemensEwsd.ResultCode.ObjectNotConnected;
 296:                  }
 297:                  else
 298:                  {
 299:                      returnCode = Ia.Ngn.Cl.Model.Business.Nokia.SiemensEwsd.ResultCode.OperationFailed;
 300:                  }
 301:              }
 302:              else
 303:              {
 304:                  match = Regex.Match(fileContent, @"(\d\d-\d\d-\d\d  \d\d:\d\d:\d\d)");
 305:   
 306:                  if (match.Success)
 307:                  {
 308:                      response.DateTime = DateTime.Parse(match.Value);
 309:   
 310:                      match = Regex.Match(fileContent, @"(DISPSUB:DN=(\d{8});)");
 311:   
 312:                      if (match.Success)
 313:                      {
 314:                          service = match.Groups[2].Value;
 315:   
 316:                          response.CommandString = match.Value;
 317:   
 318:                          serviceSupplementaryService = Ia.Ngn.Cl.Model.Business.Nokia.SiemensEwsd.ServiceSupplementaryServiceStateFromServiceNetManagerOutputString(fileContent);
 319:                          response.ServiceSupplementaryService = serviceSupplementaryService;
 320:   
 321:                          response.Service = int.Parse(service);
 322:   
 323:                          response.IsProvisioned = true;
 324:   
 325:                          returnCode = Ia.Ngn.Cl.Model.Business.Nokia.SiemensEwsd.ResultCode.OperationIsSuccessful;
 326:                      }
 327:                      else
 328:                      {
 329:                          returnCode = Ia.Ngn.Cl.Model.Business.Nokia.SiemensEwsd.ResultCode.OperationFailed;
 330:                      }
 331:                  }
 332:                  else
 333:                  {
 334:                      returnCode = Ia.Ngn.Cl.Model.Business.Nokia.SiemensEwsd.ResultCode.OperationFailed;
 335:                  }
 336:              }
 337:   
 338:              response.ReturnCode = returnCode;
 339:   
 340:              return response;
 341:          }
 342:   
 343:          ////////////////////////////////////////////////////////////////////////////
 344:          ////////////////////////////////////////////////////////////////////////////
 345:      }
 346:   
 347:      ////////////////////////////////////////////////////////////////////////////
 348:      ////////////////////////////////////////////////////////////////////////////    
 349:  }
 350: