)>}]
شركة التطبيقات المتكاملة لتصميم وبرمجة البرمجيات الخاصة ش.ش.و.
Integrated Applications Programming Company
Home » Code Library » Axe (Ia.Ftn.Cl.Model.Client.Ericsson)

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

Ericsson's AXE support class for Ericsson's PSTN Exchange Migration to Fixed Telecommunications Network (FTN) client model.

    1: using Dart.PowerTCP.Telnet;
    2: using System;
    3: using System.Collections.Generic;
    4: using System.Diagnostics;
    5:  
    6: namespace Ia.Ftn.Cl.Model.Client.Ericsson
    7: {
    8:     ////////////////////////////////////////////////////////////////////////////
    9:  
   10:     /// <summary publish="true">
   11:     /// Ericsson's AXE support class for Ericsson's PSTN Exchange Migration to Fixed Telecommunications Network (FTN) client model.
   12:     /// </summary>
   13:     /// 
   14:     /// <remarks> 
   15:     /// Copyright © 2018-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 Axe
   28:     {
   29:         private byte[] buffer = new byte[1024];
   30:         internal Telnet telnet;
   31:  
   32:         /// <summary/>
   33:         public Ia.Ftn.Cl.Model.Business.NetworkDesignDocument.Pstn Pstn { get; private set; }
   34:  
   35:         /// <summary/>
   36:         public string LastSentCommand { get; private set; }
   37:  
   38:         /// <summary/>
   39:         public Queue<string> ReceiveQueue { get; set; }
   40:  
   41:         /// <summary/>
   42:         public Queue<string> SendQueue { get; set; }
   43:  
   44:         ////////////////////////////////////////////////////////////////////////////
   45:  
   46:         /// <summary>
   47:         ///
   48:         /// </summary>
   49:         public enum ResultCode
   50:         {
   51:             Successful = 0,
   52:             NotAcceptedUnreasonableValue = 1,
   53:             NotAcceptedCommandUnknown = 2,
   54:             SubscriberNotConnected = 41,
   55:             UnknownError = 100,
   56:             Failed = 101,
   57:             TimeOut = 102,
   58:         }
   59:  
   60:         ////////////////////////////////////////////////////////////////////////////
   61:  
   62:         /// <summary>
   63:         ///
   64:         /// </summary>
   65:         public Axe(Ia.Ftn.Cl.Model.Business.NetworkDesignDocument.Pstn pstn)
   66:         {
   67:             Pstn = pstn;
   68:  
   69:             telnet = new Dart.PowerTCP.Telnet.Telnet();
   70:  
   71:             telnet.ClientOptions.Add(new Dart.PowerTCP.Telnet.Option(Dart.PowerTCP.Telnet.OptionCode.SuppressGoAheads, null, Dart.PowerTCP.Telnet.OptionState.RequestOn));
   72:             telnet.ClientOptions.Add(new Dart.PowerTCP.Telnet.Option(Dart.PowerTCP.Telnet.OptionCode.SuppressLocalEcho, null, Dart.PowerTCP.Telnet.OptionState.RequestOn));
   73:  
   74:             telnet.ServerOptions.Add(new Dart.PowerTCP.Telnet.Option(Dart.PowerTCP.Telnet.OptionCode.SuppressGoAheads, null, Dart.PowerTCP.Telnet.OptionState.RequestOn));
   75:             telnet.ServerOptions.Add(new Dart.PowerTCP.Telnet.Option(Dart.PowerTCP.Telnet.OptionCode.SuppressLocalEcho, null, Dart.PowerTCP.Telnet.OptionState.RequestOn));
   76:             telnet.ServerOptions.Add(new Dart.PowerTCP.Telnet.Option(Dart.PowerTCP.Telnet.OptionCode.OutputPageSize, null, Dart.PowerTCP.Telnet.OptionState.RequestOn));
   77:  
   78:             telnet.TerminalType = "tty";
   79:  
   80:             telnet.EndReceive += new Dart.PowerTCP.Telnet.SegmentEventHandler(this.Telnet_EndReceive);
   81:             telnet.ConnectedChangedEx += new Dart.PowerTCP.Telnet.EventHandlerEx(this.Telnet_ConnectedChangedEx);
   82:  
   83:             ReceiveQueue = new Queue<string>(100);
   84:             SendQueue = new Queue<string>(100);
   85:  
   86:             IsLoggedIn = false;
   87:         }
   88:  
   89:         ////////////////////////////////////////////////////////////////////////////
   90:  
   91:         /// <summary>
   92:         ///
   93:         /// </summary>
   94:         ~Axe()
   95:         {
   96:             Dispose();
   97:         }
   98:  
   99:         ////////////////////////////////////////////////////////////////////////////
  100:  
  101:         /// <summary>
  102:         ///
  103:         /// </summary>
  104:         public Ia.Cl.Models.Result Connect()
  105:         {
  106:             Ia.Cl.Models.Result result;
  107:  
  108:             result = new Ia.Cl.Models.Result();
  109:  
  110:             try
  111:             {
  112:                 telnet.Connect(Ia.Ftn.Cl.Model.Business.Ericsson.Axe.Host(Pstn), Ia.Ftn.Cl.Model.Business.Ericsson.Axe.Port.ToString());
  113:  
  114:                 SendQueue.Clear();
  115:  
  116:                 // receive using asynchronous technique
  117:                 telnet.ReceiveTimeout = 0;
  118:                 telnet.BeginReceive(buffer);
  119:  
  120:                 result.AddSuccess(Pstn.Name + ": Connected. ");
  121:             }
  122:             catch (Exception ex)
  123:             {
  124:                 result.AddError(Pstn.Name + ": Exception: " + ex.Message);
  125:  
  126:                 telnet.Close();
  127:             }
  128:  
  129:             return result;
  130:         }
  131:  
  132:         ////////////////////////////////////////////////////////////////////////////
  133:  
  134:         /// <summary>
  135:         ///
  136:         /// </summary>
  137:         public Ia.Cl.Models.Result Disconnect()
  138:         {
  139:             Ia.Cl.Models.Result result;
  140:  
  141:             result = new Ia.Cl.Models.Result();
  142:  
  143:             try
  144:             {
  145:                 telnet.Close();
  146:  
  147:                 SendQueue.Clear();
  148:  
  149:                 result.AddSuccess(Pstn.Name + ": Disconnected. ");
  150:             }
  151:             catch (Exception ex)
  152:             {
  153:                 result.AddError(Pstn.Name + ": Exception: " + ex.Message);
  154:             }
  155:  
  156:             return result;
  157:         }
  158:  
  159:         ////////////////////////////////////////////////////////////////////////////
  160:  
  161:         /// <summary>
  162:         ///
  163:         /// </summary>
  164:         public bool IsConnected
  165:         {
  166:             get
  167:             {
  168:                 return telnet != null && telnet.Connected;
  169:             }
  170:         }
  171:  
  172:         ////////////////////////////////////////////////////////////////////////////
  173:  
  174:         /// <summary>
  175:         ///
  176:         /// </summary>
  177:         public bool IsLoggedIn { get; set; }
  178:  
  179:         ////////////////////////////////////////////////////////////////////////////
  180:  
  181:         /// <summary>
  182:         ///
  183:         /// </summary>
  184:         public void Dispose()
  185:         {
  186:             telnet.Dispose();
  187:         }
  188:  
  189:         ////////////////////////////////////////////////////////////////////////////
  190:  
  191:         /// <summary>
  192:         ///
  193:         /// </summary>
  194:         public void SendQueueUserName()
  195:         {
  196:             SendQueue.Enqueue(Ia.Ftn.Cl.Model.Business.Ericsson.Axe.UserName(Pstn));
  197:         }
  198:  
  199:         ////////////////////////////////////////////////////////////////////////////
  200:  
  201:         /// <summary>
  202:         ///
  203:         /// </summary>
  204:         public void SendQueuePassword()
  205:         {
  206:             SendQueue.Enqueue(Ia.Ftn.Cl.Model.Business.Ericsson.Axe.Password(Pstn));
  207:         }
  208:  
  209:         ////////////////////////////////////////////////////////////////////////////
  210:  
  211:         /// <summary>
  212:         ///
  213:         /// </summary>
  214:         public void SendQueueLogoutCommand()
  215:         {
  216:             SendQueue.Clear();
  217:  
  218:             SendQueue.Enqueue(Ia.Ftn.Cl.Model.Business.Ericsson.Axe.LogoutCommand);
  219:         }
  220:  
  221:         ////////////////////////////////////////////////////////////////////////////
  222:  
  223:         /// <summary>
  224:         ///
  225:         /// </summary>
  226:         public Ia.Cl.Models.Result Send(string text)
  227:         {
  228:             Ia.Cl.Models.Result result;
  229:  
  230:             result = new Ia.Cl.Models.Result();
  231:  
  232:             try
  233:             {
  234:                 if (telnet.Connected)
  235:                 {
  236:                     if (text != null)
  237:                     {
  238:                         LastSentCommand = text;
  239:  
  240:                         telnet.Send(text + "\r\n");
  241:  
  242:                         result.AddSuccess(Pstn.Name + ": Sent: " + text);
  243:                     }
  244:                     else
  245:                     {
  246:                         result.AddError(Pstn.Name + ": No text to send. ");
  247:                     }
  248:                 }
  249:                 else
  250:                 {
  251:                     result.AddError(Pstn.Name + ": No established telnet connection. ");
  252:                     //if(processRunning) waitToConnectionCounter = waitToConnectionCounterSeconds;
  253:                 }
  254:             }
  255:             catch (System.Reflection.TargetInvocationException ex)
  256:             {
  257:                 result.AddError(ex.Message);
  258:             }
  259:  
  260:             return result;
  261:         }
  262:  
  263:         ////////////////////////////////////////////////////////////////////////////
  264:  
  265:         /// <summary>
  266:         ///
  267:         /// </summary>
  268:         private void Telnet_EndReceive(object sender, Dart.PowerTCP.Telnet.SegmentEventArgs e)
  269:         {
  270:             string rowString, filteredString;
  271:  
  272:             if (e.Exception == null)
  273:             {
  274:                 rowString = e.Segment.ToString();
  275:  
  276:                 filteredString = rowString.Replace("\u0003", "").Replace("<", "").Trim();
  277:  
  278:                 if (!string.IsNullOrEmpty(filteredString) && !string.IsNullOrWhiteSpace(filteredString))
  279:                 {
  280:                     if (filteredString != LastSentCommand) // to ignore echoed command
  281:                     {
  282:                         ReceiveQueue.Enqueue(filteredString);
  283:                     }
  284:                 }
  285:                 else
  286:                 {
  287:  
  288:                 }
  289:  
  290:                 if (telnet.Connected) telnet.BeginReceive(buffer);
  291:             }
  292:             else
  293:             {
  294:                 Debug.WriteLine("Telnet_EndReceive(): Exception: " + e.Exception.Message);
  295:  
  296:                 // I will not throw or handle the exception from the event handler
  297:                 // https://stackoverflow.com/questions/3114543/should-event-handlers-in-c-sharp-ever-raise-exceptions
  298:                 //throw new Exception("Telnet_EndReceive(): " + e.Exception.Message);
  299:             }
  300:         }
  301:  
  302:         ////////////////////////////////////////////////////////////////////////////
  303:  
  304:         /// <summary>
  305:         ///
  306:         /// </summary>
  307:         private void Telnet_ConnectedChangedEx(object sender, System.EventArgs e)
  308:         {
  309:  
  310:         }
  311:  
  312:         ////////////////////////////////////////////////////////////////////////////
  313:  
  314:         /// <summary>
  315:         ///
  316:         /// </summary>
  317:         public Ia.Cl.Models.Result Update(string formattedString, ref Ia.Ftn.Cl.Model.Client.Ericsson.Axe axe)
  318:         {
  319:             Ia.Cl.Models.Result result;
  320:  
  321:             Ia.Ftn.Cl.Model.Data.Ericsson.Axe.UpdateDatabaseWithAxeCommandOutput(formattedString, ref axe, out result);
  322:  
  323:             return result;
  324:         }
  325:  
  326:         ////////////////////////////////////////////////////////////////////////////
  327:         ////////////////////////////////////////////////////////////////////////////
  328:     }
  329:  
  330:     ////////////////////////////////////////////////////////////////////////////
  331:     ////////////////////////////////////////////////////////////////////////////
  332: }