public IList InteraccionAB(ref Terminal datosA, bool interno) { Conexion cxn = new Conexion(); IList objs = new List<object>(); try { TR.ordenAckE = 0; TR.ordenMsgNackE = 0; TransacManager.ProtoConfig.NACK_ENV = NackEnv.SINERROR; datosA.Tipo = TransacManager.ProtoConfig.BASE_CONFIG.TerminalModelo; Enviar(ConstructorMenEnv.crearA_Logueo(datosA, UltimaConexionOptima, TransacManager.ProtoConfig.LOCAL_IP), EnumPaquete.DATOS, TR.ordenMsgNackE); TR.ordenMsgNackE++; Errorof errOf = new Errorof(); //Recibo Mensaje B y envío ACK o NACK do { bytes = new byte[ProtocoloConfig.TamBuffer]; objs = Recibir(bytes, 2, 0, "B"); //atrapa errores de recepción if (objs.Count > 1 && !(objs[0] is string)) { byte[] ACK = { }; Enviar(ACK, EnumPaquete.ACK, TR.ordenAckE); } else { break; } } while (TransacManager.ProtoConfig.NACK_ENV != NackEnv.SINERROR); if (objs == null || objs.Count == 0 ) { throw new Exception("Lista de objetos(objs) regreso vacía de Recibir()"); } else if (objs[0] is string) { Error err = MensajeNack(objs[0]); objs.Insert(0, err); } else if (objs[0].GetType() == typeof(Error) && ((Error)objs[0]).CodError != 0) { foreach (Object obj in objs) { if (obj is PRN) { cxn.crear_XMLprn(((PRN)obj).Nombre1, ((PRN)obj).Nombre2, ((PRN)obj).Nombre3, ((PRN)obj).Port1, ((PRN)obj).Port2, ((PRN)obj).Port3, ((PRN)obj).Telefono1, ((PRN)obj).Telefono2, ((PRN)obj).Telefono3, TransacManager.ProtoConfig.CONFIG); } else if(obj is Error) ((Error)objs[0]).Estado = 0; } return objs; } else if (objs[0] is Error && ((Error)objs[0]).CodError == 0 && objs[1] is Agente) { Agente agente = (Agente)objs[1]; Agente agen = new Agente(agente, out errOf); if (errOf.Error != 0) { ((Error)objs[0]).CodError = (uint)errOf.Error; ((Error)objs[0]).Descripcion = errOf.Mensaje; ((Error)objs[0]).Estado = 2; } PRN prn = (PRN)objs[2]; Terminal terminal = (Terminal)objs[3]; datosA.indiceTelecarga = terminal.indiceTelecarga; datosA.longArchivo = terminal.longArchivo; datosA.correo = terminal.correo; datosA.defLengConc1 = terminal.defLengConc1; datosA.defLengConc2 = terminal.defLengConc2; datosA.statusConc = terminal.statusConc; if (interno) { cxn.crear_XMLprn(prn.Nombre1, prn.Nombre2, prn.Nombre3, prn.Port1, prn.Port2, prn.Port3, prn.Telefono1, prn.Telefono2, prn.Telefono3, TransacManager.ProtoConfig.CONFIG); Desconectar(interno); return objs; } else { cxn.crear_XMLprn(prn.Nombre1, prn.Nombre2, prn.Nombre3, prn.Port1, prn.Port2, prn.Port3, prn.Telefono1, prn.Telefono2, prn.Telefono3, TransacManager.ProtoConfig.CONFIG); } } return objs; } catch (Exception ex) { Error err = new Error(); err.CodError = (int)ErrComunicacion.LOGIN; err.Descripcion = "Ocurrió un error en la comunicación al intentar enviar credenciales."; //Definir que descripción pasar con Jorge err.Estado = 0; LogBMTP.LogMessage("Excepción: " + err.CodError + " " + err.Descripcion, lvlLogExcepciones, TimeStampLog); LogBMTP.LogMessage("Excepción: " + ex.Message, lvlLogDebug, TimeStampLog); objs.Insert(0, err); if (objs.Count > 1) objs.RemoveAt(1); return objs; } }
private Error Crea_PRN_TelefonoSerie(Terminal ter) { string nombre1, nombre2, nombre3, port1, port2, port3, tel1, tel2, tel3; Conexion cxn = new Conexion(); Error cxnErr = new Error(); try { #region // PROCESO DE CONEXIÓN bool sale = false; int fusible = 0; while (sale == false) // INTENTA HASTA CONECTAR CON PRN { string res = cxn.Leer_XMLprn(out nombre1, out nombre2, out nombre3, out port1, out port2, out port3, out tel1, out tel2, out tel3, TransacManager.ProtoConfig.CONFIG); if (res == null) // EXISTE PRN { #region // INTENTA CONECTAR CON PRN string[] nom = { nombre1, nombre2, nombre3 }; string[] por = { port1, port2, port3 }; string[] tel = { tel1, tel2, tel3 }; for (int j = 0; j < 3; j++) { try { if (nom[j] != null) { sale = LogInTelefono(nom[j], tel[j]); } } catch (Exception e) { LogBMTP.LogMessage("TELEFONO: Excepción al intentar con PRN:Nombre " + j.ToString(), lvlLogExcepciones, TimeStampLog); LogBMTP.LogMessage(e.Message + " \n" + e.InnerException, lvlLogDebug, TimeStampLog); } if (sale == true) { UltimaConexionOptima[0] = nom[j]; UltimaConexionOptima[1] = por[j]; UltimaConexionOptima[2] = tel[j]; break; } else LogBMTP.LogMessage("TELEFONO: Intento con PRN: Nombre " + nom[j] + " falló.", lvlLogCxn, TimeStampLog); } #endregion if (fusible >= 2 && sale == false) { sale = true; cxnErr.CodError = (int)ErrComunicacion.CONEX_SERIAL; cxnErr.Descripcion = "Error de conexión. No puede establecerse una comunicación. Se superaron los intentos de conexión."; cxnErr.Estado = 0; break; } if (sale == false) { #region // FALLÓ PRN, INTENTA CON CONFIG.BIN cxn.Borrar_XMLprn(TransacManager.ProtoConfig.CONFIG); try { sale = LogInTelefono(TransacManager.ProtoConfig.CONFIG.Host, TransacManager.ProtoConfig.CONFIG.Telefono); } catch (Exception e) { LogBMTP.LogMessage("TELEFONO: Excepción al intentar con valores por defecto.", lvlLogExcepciones, TimeStampLog); LogBMTP.LogMessage(e.Message + " \n" + e.InnerException, lvlLogDebug, TimeStampLog); } if (sale == false) { LogBMTP.LogMessage("TELEFONO: Intento valores por defecto: Nombre " + TransacManager.ProtoConfig.CONFIG.Host + " falló.", lvlLogCxn, TimeStampLog); cxnErr.CodError = (int)ErrComunicacion.CONEX_SERIAL; cxnErr.Descripcion = "Error de conexión. No pudo establecerse una comunicación con los valores del PRN, ni los por defecto."; cxnErr.Estado = 0; CierraPuertoSerie(); sale = true; } else { UltimaConexionOptima[0] = TransacManager.ProtoConfig.CONFIG.DefaultServer.ToString(); UltimaConexionOptima[1] = TransacManager.ProtoConfig.CONFIG.Port.ToString(); UltimaConexionOptima[2] = TransacManager.ProtoConfig.CONFIG.Telefono; Comunicacion cm = new Comunicacion(TransacManager.ProtoConfig.BASE_CONFIG, TransacManager.ProtoConfig.CONFIG); IList rdo = cm.InteraccionAB(ref ter, true); if (rdo[0] is Error) { if (((Error)rdo[0]).CodError != 0) { cxnErr = (Error)rdo; sale = true; } else { CierraPuertoSerie(); cxnErr = AbrePuertoTelefono(); if (cxnErr.CodError == 0) sale = false; else { CierraPuertoSerie(); return cxnErr; } } } else { cxnErr.CodError = (int)ErrComunicacion.CXN_NO_GENERA_PRN; cxnErr.Descripcion = "Error de conexión. No se pudo obtener el PRN."; cxnErr.Estado = 0; CierraPuertoSerie(); return cxnErr; } fusible++; } #endregion } } else // NO EXISTE PRN { #region // INTENTA CONECTAR CON CONFIG.BIN try { sale = LogInTelefono(TransacManager.ProtoConfig.CONFIG.Host, TransacManager.ProtoConfig.CONFIG.Telefono); } catch (Exception e) { LogBMTP.LogMessage("TELEFONO: Excepción al intentar con valores por defecto.", lvlLogExcepciones, TimeStampLog); LogBMTP.LogMessage(e.Message + " \n" + e.InnerException, lvlLogDebug, TimeStampLog); } if (sale == false) { LogBMTP.LogMessage("TELEFONO: Intento valores por defecto: Nombre " + TransacManager.ProtoConfig.CONFIG.Host + " falló.", lvlLogCxn, TimeStampLog); cxnErr.CodError = (int)ErrComunicacion.CONEX_SERIAL; cxnErr.Descripcion = "Error de conexión. No pudo establecerse una comunicación con los valores del PRN, ni los por defecto."; cxnErr.Estado = 0; CierraPuertoSerie(); sale = true; } else { UltimaConexionOptima[0] = TransacManager.ProtoConfig.CONFIG.DefaultServer.ToString(); UltimaConexionOptima[1] = TransacManager.ProtoConfig.CONFIG.Port.ToString(); UltimaConexionOptima[2] = TransacManager.ProtoConfig.CONFIG.Telefono; Comunicacion cm = new Comunicacion(TransacManager.ProtoConfig.BASE_CONFIG, TransacManager.ProtoConfig.CONFIG); IList rdo = cm.InteraccionAB(ref ter, true); if (rdo[0] is Error) { if (((Error)rdo[0]).CodError != 0) { cxnErr = (Error)rdo; sale = true; } else { CierraPuertoSerie(); cxnErr = AbrePuertoTelefono(); if (cxnErr.CodError == 0) sale = false; else { CierraPuertoSerie(); return cxnErr; } } } else { cxnErr.CodError = (int)ErrComunicacion.CXN_NO_GENERA_PRN; cxnErr.Descripcion = "Error de conexión. No se pudo obtener el PRN."; cxnErr.Estado = 0; CierraPuertoSerie(); return cxnErr; } fusible++; } #endregion if (fusible >= 2 && sale == false) { sale = true; cxnErr.CodError = (int)ErrComunicacion.CONEXION; cxnErr.Descripcion = "Error de conexión. No puede establecerse una comunicación. Se superaron los intentos de conexión."; cxnErr.Estado = 0; CierraPuertoSerie(); break; } } } #endregion if (cxnErr.CodError != 0) LogBMTP.LogMessage("Error de conexión: " + cxnErr.CodError + "\n" + " Descripción: " + cxnErr.Descripcion + "\n", lvlLogError, TimeStampLog); return cxnErr; } catch (Exception ex) { cxnErr.CodError = (int)ErrComunicacion.CONEX_SERIALex; cxnErr.Descripcion = "Error de conexión. No puede establecerse una comunicación."; cxnErr.Estado = 0; LogBMTP.LogMessage("Excepción: " + cxnErr.CodError + " " + cxnErr.Descripcion, lvlLogExcepciones, TimeStampLog); LogBMTP.LogMessage("Excepción: " + ex.ToString(), lvlLogExcepciones, TimeStampLog); return cxnErr; } }
//Ethernet private Error Crea_PRN_Socket(Terminal ter) { string nombre1, nombre2, nombre3, port1, port2, port3, tel1, tel2, tel3; Conexion cxn = new Conexion(); Error cxnErr = new Error(); IPHostEntry ipHost; IPAddress ipAddr; try { #region // PROCESO DE CONEXIÓN IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName()); for (int i = 0; i < ipHostInfo.AddressList.Length; i++) { TransacManager.ProtoConfig.LOCAL_IP = ipHostInfo.AddressList[i]; //----------- Cambia de 1 elemento a 2. if (TransacManager.ProtoConfig.LOCAL_IP.AddressFamily == AddressFamily.InterNetwork) break; } IPEndPoint localEndPoint = new IPEndPoint(TransacManager.ProtoConfig.LOCAL_IP, TransacManager.ProtoConfig.LOCAL_PORT); bool sale = false; int fusible = 0; while (sale == false) // INTENTA HASTA CONECTAR CON PRN { SocketPermission permission = new SocketPermission(PermissionState.Unrestricted //NetworkAccess.Connect, // Connection permission //TransportType.Tcp, // Defines transport types //"", // Gets the IP addresses //SocketPermission.AllPorts // All ports ); //SocketPermissionAttribute per = new SocketPermissionAttribute(SecurityAction. permission.Demand(); string res = cxn.Leer_XMLprn(out nombre1, out nombre2, out nombre3, out port1, out port2, out port3, out tel1, out tel2, out tel3, TransacManager.ProtoConfig.CONFIG); if (res == null && TransacManager.ProtoConfig.CON_CICLO_PRN) // EXISTE PRN { #region // INTENTA CONECTAR CON PRN string[] nom = { nombre1, nombre2, nombre3 }; string[] por = { port1, port2, port3 }; string[] tel = { tel1, tel2, tel3 }; for (int j = 0; j < 3; j++) { try { ipHost = Dns.GetHostEntry(nom[j]); if (ipHost is IPHostEntry) { ipAddr = null; for (int i = 0; i < ipHost.AddressList.Length; i++) { ipAddr = ipHost.AddressList[i]; //----------- Cambia de 1 elemento a 2. if (ipAddr.AddressFamily == AddressFamily.InterNetwork) break; } LogBMTP.LogMessage("Resulve DNS: " + nom[j] + " - " + ipAddr, lvlLogCxn, TimeStampLog); ipEndPoint = new IPEndPoint(ipAddr, Convert.ToInt32(por[j])); sender = new Socket( ipAddr.AddressFamily,// Specifies the addressing scheme SocketType.Stream, // The type of socket ProtocolType.Tcp // Specifies the protocols ); sender.NoDelay = false; // Using the Nagle algorithm sender.ReceiveTimeout = ProtocoloConfig.TimeoutSocket; sender.SendTimeout = ProtocoloConfig.TimeoutSocket; sender.Bind(localEndPoint); sender.Connect(ipEndPoint); } } catch (Exception e) { ipHost = null; LogBMTP.LogMessage(" Intento con " + nom[j] + "(" + j + ") falló. \n" + e.Message + " " + e.InnerException, lvlLogDebug, TimeStampLog); if (sender != null) sender.Close(); } if (sender != null && sender.Connected == true) { UltimaConexionOptima[0] = nom[j]; UltimaConexionOptima[1] = por[j]; UltimaConexionOptima[2] = tel[j]; sale = true; break; } } #endregion if (fusible >= 2 && sale == false) { sale = true; cxnErr.CodError = (int)ErrComunicacion.CXN_SOCKET; cxnErr.Descripcion = "Error de conexión. No puede establecerse una comunicación. Se superaron los intentos de conexión."; cxnErr.Estado = 0; break; } if (sender == null || sender.Connected != true) { #region // FALLÓ PRN, INTENTA CON CONFIG.BIN cxn.Borrar_XMLprn(TransacManager.ProtoConfig.CONFIG); try { if (!PuertoDisponible(localEndPoint.Port)) { cxnErr.CodError = (int)ErrComunicacion.CXN_SOCKET; cxnErr.Descripcion = "Error de conexión. Puerto default ocupado."; cxnErr.Estado = 0; return cxnErr; } ipAddr = TransacManager.ProtoConfig.CONFIG.DefaultServer; ipEndPoint = new IPEndPoint(ipAddr, TransacManager.ProtoConfig.CONFIG.Port); sender = new Socket( ipAddr.AddressFamily,// Specifies the addressing scheme SocketType.Stream, // The type of socket ProtocolType.Tcp // Specifies the protocols ); sender.NoDelay = false; // Using the Nagle algorithm sender.ReceiveTimeout = ProtocoloConfig.TimeoutSocket; sender.SendTimeout = ProtocoloConfig.TimeoutSocket; sender.Bind(localEndPoint); sender.Connect(ipEndPoint); } catch (Exception e) { ipHost = null; LogBMTP.LogMessage(e.Message + " \n" + e.InnerException, lvlLogDebug, TimeStampLog); } if (sender.Connected != true) { cxnErr.CodError = (int)ErrComunicacion.CXN_SOCKET; cxnErr.Descripcion = "Error de conexión. No pudo establecerse una comunicación con los valores del PRN, ni los por defecto."; cxnErr.Estado = 0; sale = true; } else { UltimaConexionOptima[0] = TransacManager.ProtoConfig.CONFIG.DefaultServer.ToString(); UltimaConexionOptima[1] = TransacManager.ProtoConfig.CONFIG.Port.ToString(); UltimaConexionOptima[2] = TransacManager.ProtoConfig.CONFIG.Telefono; LogBMTP.LogMessage("CONEXIÓN EXITOSA CON VALORES DEFAULT:\n ", lvlLogCxn, TimeStampLog); LogBMTP.LogMessage("HOST: IP " + ipEndPoint.Address + " Port " + ipEndPoint.Port + "\n", lvlLogCxn, TimeStampLog); LogBMTP.LogMessage("BMTP: IP " + ((IPEndPoint)sender.LocalEndPoint).Address + " Port " + ((IPEndPoint)sender.LocalEndPoint).Port + "\n", lvlLogCxn, TimeStampLog); Comunicacion cm = new Comunicacion(TransacManager.ProtoConfig.BASE_CONFIG, TransacManager.ProtoConfig.CONFIG, true); cm.sender = sender; IList rdo = cm.InteraccionAB(ref ter, true); if (rdo[0] is Error) { if (((Error)rdo[0]).CodError != 0) { cxnErr = (Error)rdo; sale = true; } } else { cxnErr.CodError = (int)ErrComunicacion.CXN_NO_GENERA_PRN; cxnErr.Descripcion = "Error de conexión. No se pudo obtener el PRN."; cxnErr.Estado = 0; } fusible++; } #endregion } } else // NO EXISTE PRN { #region // INTENTA CONECTAR CON CONFIG.BIN try { if (!PuertoDisponible(TransacManager.ProtoConfig.CONFIG.Port) || !PuertoDisponible(localEndPoint.Port)) { cxnErr.CodError = (int)ErrComunicacion.CXN_SOCKET; cxnErr.Descripcion = "Error de conexión. Puerto default ocupado."; cxnErr.Estado = 0; return cxnErr; } ipAddr = TransacManager.ProtoConfig.CONFIG.DefaultServer; ipEndPoint = new IPEndPoint(ipAddr, TransacManager.ProtoConfig.CONFIG.Port); sender = new Socket( ipAddr.AddressFamily,// Specifies the addressing scheme SocketType.Stream, // The type of socket ProtocolType.Tcp // Specifies the protocols ); sender.NoDelay = false; // Using the Nagle algorithm sender.ReceiveTimeout = ProtocoloConfig.TimeoutSocket; sender.SendTimeout = ProtocoloConfig.TimeoutSocket; sender.Bind(localEndPoint); sender.Connect(ipEndPoint); //sender.Send(DataConverter.Pack("^$8", "Holaaaaaaaaa <EOF>")); } catch (Exception e) { ipHost = null; LogBMTP.LogMessage(e.Message + " \n" + e.InnerException, lvlLogDebug, TimeStampLog); } if (sender.Connected != true) { cxnErr.CodError = (int)ErrComunicacion.CXN_SOCKET; cxnErr.Descripcion = "Error de conexión. No puede establecerse una comunicación con los valores por defecto."; cxnErr.Estado = 0; sale = true; } else { UltimaConexionOptima[0] = TransacManager.ProtoConfig.CONFIG.DefaultServer.ToString(); UltimaConexionOptima[1] = TransacManager.ProtoConfig.CONFIG.Port.ToString(); UltimaConexionOptima[2] = TransacManager.ProtoConfig.CONFIG.Telefono; LogBMTP.LogMessage("CONEXIÓN EXITOSA CON VALORES DEFAULT:\n ", lvlLogCxn, TimeStampLog); LogBMTP.LogMessage("HOST: IP " + ipEndPoint.Address + " Port " + ipEndPoint.Port + "\n", lvlLogCxn, TimeStampLog); LogBMTP.LogMessage("BMTP: IP " + ((IPEndPoint)sender.LocalEndPoint).Address + " Port " + ((IPEndPoint)sender.LocalEndPoint).Port + "\n", lvlLogCxn, TimeStampLog); if (TransacManager.ProtoConfig.CON_CICLO_PRN) { Comunicacion cm = new Comunicacion(TransacManager.ProtoConfig.BASE_CONFIG, TransacManager.ProtoConfig.CONFIG, true); cm.sender = sender; IList rdo = cm.InteraccionAB(ref ter, true); if (rdo[0] is Error) { if (((Error)rdo[0]).CodError != 0) { cxnErr = (Error)rdo[0]; sale = true; } } else { cxnErr.CodError = (int)ErrComunicacion.CXN_NO_GENERA_PRN; cxnErr.Descripcion = "Error de conexión. No se pudo obtener el PRN."; cxnErr.Estado = 0; } } fusible++; } #endregion if (fusible >= 2 && sale == false) { sale = true; cxnErr.CodError = (int)ErrComunicacion.CXN_SOCKETex; cxnErr.Descripcion = "Error de conexión. No puede establecerse una comunicación. Se superaron los intentos de conexión."; cxnErr.Estado = 0; break; } } } #endregion if (cxnErr.CodError != 0) LogBMTP.LogMessage("Error de conexión: " + cxnErr.CodError + "\n" + " Descripción: " + cxnErr.Descripcion + "\n", lvlLogCxn, TimeStampLog); else { LogBMTP.LogMessage("CONEXIÓN EXITOSA:\n ", lvlLogCxn, TimeStampLog); LogBMTP.LogMessage("HOST: IP " + ipEndPoint.Address + " Port " + ipEndPoint.Port + "\n", lvlLogCxn, TimeStampLog); LogBMTP.LogMessage("BMTP: IP " + ((IPEndPoint)sender.LocalEndPoint).Address + " Port " + ((IPEndPoint)sender.LocalEndPoint).Port + "\n", lvlLogCxn, TimeStampLog); } return cxnErr; } catch (Exception ex) { cxnErr.CodError = (int)ErrComunicacion.CONEXIONex; cxnErr.Descripcion = "Error de conexión. No puede establecerse una comunicación."; cxnErr.Estado = 0; LogBMTP.LogMessage("Excepción: " + cxnErr.CodError + " " + cxnErr.Descripcion, lvlLogExcepciones, TimeStampLog); LogBMTP.LogMessage("Excepción: " + ex.ToString(), lvlLogExcepciones, TimeStampLog); return cxnErr; } }
private Error Crea_PRN_Socket_TEST(Terminal ter) { //string nombre1, nombre2, nombre3, port1, port2, port3, tel1, tel2, tel3; Conexion cxn = new Conexion(); Error cxnErr = new Error(); // IPHostEntry ipHost; IPAddress ipAddr; IPAddress ipAddrLocal; try { IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName()); ipAddrLocal = null; for (int i = 0; i < ipHostInfo.AddressList.Length; i++) { ipAddrLocal = ipHostInfo.AddressList[i]; //----------- Cambia de 1 elemento a 2. if (ipAddrLocal.AddressFamily == AddressFamily.InterNetwork) break; } IPEndPoint localEndPoint = new IPEndPoint(ipAddrLocal, TransacManager.ProtoConfig.LOCAL_PORT); SocketPermission permission = new SocketPermission(PermissionState.Unrestricted //NetworkAccess.Connect, // Connection permission //TransportType.Tcp, // Defines transport types //"", // Gets the IP addresses //SocketPermission.AllPorts // All ports ); //SocketPermissionAttribute per = new SocketPermissionAttribute(SecurityAction. permission.Demand(); #region // INTENTA CONECTAR CON CONFIG.BIN try { ipAddr = TransacManager.ProtoConfig.CONFIG.DefaultServer; ipEndPoint = new IPEndPoint(ipAddr, TransacManager.ProtoConfig.CONFIG.Port); sender = new Socket( ipAddr.AddressFamily,// Specifies the addressing scheme SocketType.Stream, // The type of socket ProtocolType.Tcp // Specifies the protocols ); sender.NoDelay = false; // Using the Nagle algorithm sender.Bind(localEndPoint); sender.Connect(ipEndPoint); //sender.Send(DataConverter.Pack("^$8", "Holaaaaaaaaa <EOF>")); } catch (Exception e) { // ipHost = null; LogBMTP.LogMessage(e.Message + " \n" + e.InnerException, lvlLogDebug, TimeStampLog); } if (sender.Connected != true) { cxnErr.CodError = (int)ErrComunicacion.CXN_SOCKET; cxnErr.Descripcion = "Error de conexión. No puede establecerse una comunicación con los valores por defecto."; cxnErr.Estado = 0; } else { UltimaConexionOptima[0] = TransacManager.ProtoConfig.CONFIG.DefaultServer.ToString(); UltimaConexionOptima[1] = TransacManager.ProtoConfig.CONFIG.Port.ToString(); UltimaConexionOptima[2] = TransacManager.ProtoConfig.CONFIG.Telefono; LogBMTP.LogMessage("CONEXIÓN EXITOSA CON VALORES DEFAULT:\n ", lvlLogCxn, TimeStampLog); LogBMTP.LogMessage("HOST: IP " + ipEndPoint.Address + " Port " + ipEndPoint.Port + "\n", lvlLogCxn, TimeStampLog); LogBMTP.LogMessage("BMTP: IP " + ((IPEndPoint)sender.LocalEndPoint).Address + " Port " + ((IPEndPoint)sender.LocalEndPoint).Port + "\n", lvlLogCxn, TimeStampLog); } #endregion if (cxnErr.CodError != 0) LogBMTP.LogMessage("Error de conexión: " + cxnErr.CodError + "\n" + " Descripción: " + cxnErr.Descripcion + "\n", lvlLogError, TimeStampLog); else { LogBMTP.LogMessage("CONEXIÓN EXITOSA:\n ", lvlLogCxn, TimeStampLog); LogBMTP.LogMessage("HOST: IP " + ipEndPoint.Address + " Port " + ipEndPoint.Port + "\n", lvlLogCxn, TimeStampLog); LogBMTP.LogMessage("BMTP: IP " + ((IPEndPoint)sender.LocalEndPoint).Address + " Port " + ((IPEndPoint)sender.LocalEndPoint).Port + "\n", lvlLogCxn, TimeStampLog); } return cxnErr; } catch (Exception ex) { cxnErr.CodError = (int)ErrComunicacion.CONEXIONex; cxnErr.Descripcion = "Error de conexión. No puede establecerse una comunicación."; cxnErr.Estado = 0; LogBMTP.LogMessage("Excepción: " + cxnErr.CodError + " " + cxnErr.Descripcion, lvlLogExcepciones, TimeStampLog); LogBMTP.LogMessage("Excepción: " + ex.ToString(), lvlLogExcepciones, TimeStampLog); return cxnErr; } }
//Dialup private Error CreaVPNxTel() { Error cxnErr = new Error(); string telDefault = TransacManager.ProtoConfig.CONFIG.Telefono;// "08006665807"; string prefijo = TransacManager.ProtoConfig.CONFIG.CxnTelPrefijo;// "11000"; string separador = "w"; if (String.IsNullOrEmpty(prefijo)) { prefijo = ""; separador = ""; } string modemDefault = TransacManager.ProtoConfig.CONFIG.CxnTelNombreModem;// "Conexant USB CX93010 ACF Modem"; string user = TransacManager.ProtoConfig.CONFIG.CxnTelUser;// "bmtp"; string pass = TransacManager.ProtoConfig.CONFIG.CxnTelPass;// "bmtp"; uint timeout = TransacManager.ProtoConfig.CONFIG.CxnTelTimeout; string nombre1, nombre2, nombre3, port1, port2, port3, tel1, tel2, tel3; Conexion cxn = new Conexion(); string rdo = cxn.Leer_XMLprn(out nombre1, out nombre2, out nombre3, out port1, out port2, out port3, out tel1, out tel2, out tel3, TransacManager.ProtoConfig.CONFIG); string[] tel = new string[4]; if (rdo == null) { tel[0] = tel1; tel[1] = tel2; tel[2] = tel3; tel[3] = telDefault; } else tel[0] = telDefault; string path = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.User); using (RasPhoneBook pbk = new RasPhoneBook()) { pbk.Open(path); // Find the device that will be used to dial the connection. RasDevice device = RasDevice.GetDevices().Where(u => u.Name == modemDefault && u.DeviceType == RasDeviceType.Modem).First(); RasEntry entry; ICollection<RasConnection> conecciones = RasConnection.GetActiveConnections(); if (conecciones.Count > 0) { RasConnection conn1 = conecciones.Where(o => o.EntryName == "BMTP Dial up").First(); conn1.HangUp(); } pbk.Entries.Clear(); try { entry = RasEntry.CreateDialUpEntry("BMTP Dial up", prefijo + separador + tel[0], device); if (rdo == null) { entry.AlternatePhoneNumbers.Add(prefijo + separador + tel[1]); entry.AlternatePhoneNumbers.Add(prefijo + separador + tel[2]); entry.AlternatePhoneNumbers.Add(prefijo + separador + telDefault); LogBMTP.LogMessage("Se leyó PRN. Telefonos alternativos cargados.", lvlLogCxn, TimeStampLog); } else { LogBMTP.LogMessage("No hay PRN. Intentará conectar con número telefónico por defecto.", lvlLogCxn, TimeStampLog); } //entry.Options.ModemLights = true; //entry.Options.ShowDialingProgress = true; //entry.Options.TerminalBeforeDial = true; //entry.Options.TerminalAfterDial = true; pbk.Entries.Add(entry); using (RasDialer dialer = new RasDialer()) { dialer.Dispose(); dialer.EntryName = "BMTP Dial up"; dialer.PhoneBookPath = path; dialer.Credentials = new NetworkCredential(user, pass); dialer.Timeout = (int)timeout; dialer.Options.DisableReconnect = false; dialer.Options.SetModemSpeaker = true; dialer.Dial(); } } catch (Exception e) { pbk.Entries.Clear(); LogBMTP.LogMessage(e.ToString(), lvlLogExcepciones, TimeStampLog); cxnErr.CodError = (int)ErrComunicacion.CXN_TELEFONOex; cxnErr.Descripcion = "Error de conexión. No puede establecerse una comunicación por telefono."; cxnErr.Estado = 0; LogBMTP.LogMessage("Excepción: " + cxnErr.CodError + " " + cxnErr.Descripcion, lvlLogExcepciones, TimeStampLog); LogBMTP.LogMessage("Excepción: " + e.ToString(), lvlLogExcepciones, TimeStampLog); } } return cxnErr; }