#pragma warning disable RECS0135 // Function does not reach its end or a 'return' statement by any of possible execution paths public void StartTimer() #pragma warning restore RECS0135 // Function does not reach its end or a 'return' statement by any of possible execution paths { while (true) { RouteXML.SendRoutingTables(); Thread.Sleep(Constants.TIME_TO_SLEEP); } }
public String ProcessMsg(string content, String respuesta) { bool esProtocolo = false; XmlDocument xDoc = new XmlDocument(); //parseamos el mensaje para pasar los parámetros de conexion try{ xDoc.LoadXml(content); } catch (Exception e) { log.Fatal("Message XML structure malformed: " + e.Message + "--> " + e.StackTrace, e); return(""); } String clienteDestino = "", clienteOrigen = "", codigo = "", ip_origen = ""; //El cliente destino y origen del mensaje original try{ clienteDestino = xDoc.GetElementsByTagName("destination")[0].InnerText; clienteOrigen = xDoc.GetElementsByTagName("source")[0].InnerText; } catch (Exception e) { log.Fatal("Message Fields malformed: " + e.Message + ": " + e.StackTrace, e); return(""); } respuesta = content; //Mis ips IPHostEntry iphostentry = Dns.GetHostEntry(Dns.GetHostName()); // Enumerate IP addresses String nIP; foreach (IPAddress ipaddress in iphostentry.AddressList) { nIP = Constants.ipPublica.ToString(); //Si recibo el mensaje de un cliente hacia mi mismo if (clienteDestino == nIP && this._origen == Constants.CLIENTE) { RemoteDatabase db = new RemoteDatabase(); //Si es una nueva conexion la registramos en la tabla de rutas if (xDoc.GetElementsByTagName("message_type")[0].InnerText == "010") { log.Info("Actualizando estado en la tabla de rutas del cliente '" + clienteOrigen + "'"); ip_origen = xDoc.GetElementsByTagName("ip")[0].InnerText; RouteXML.PrepararRuta(clienteOrigen, ip_origen, nIP); log.Info(clienteOrigen + "ha realizado la conexión con exito."); esProtocolo = true; } else if (xDoc.GetElementsByTagName("message_type")[0].InnerText == "011") { codigo = xDoc.GetElementsByTagName("code")[0].InnerText; if (db.CheckCode(clienteOrigen, codigo)) { log.Info("Anunciando nombre al cliente '" + clienteOrigen + "'"); respuesta = AnunciarNombresAlCliente(xDoc, content); } else { respuesta = "El cliente que se ha intentado conectar no es legítimo"; log.Error(respuesta); return(""); } esProtocolo = true; } } //Si recibo un mensaje de un GK hacia mi mismo else if (clienteDestino == nIP && this._origen == Constants.GATEKEEPER) { log.Info("Recibida tabla de rutas...actualizando rutas."); RouteXML.merge(content); esProtocolo = true; } } if (!esProtocolo) { //Si tenemos la direccion de destino en nuestra tabla de rutas if (this._clienteDireccion.ContainsKey(clienteDestino)) { //Por defecto usamos d_hop para reenviarlo al siguiente GK IPAddress ip_dest = _clienteDireccion[clienteDestino]; //Si resulta que la distancia es 0 usamos la d_node if (this._clienteDistancia[clienteDestino] == 0) { ip_dest = RouteXML.CargarIP(clienteDestino); } else { this._port = Constants.PORT_SENDING_TO_GATEKEEPER; } log.Info("Enviando a " + ip_dest + "al puerto " + this._port); respuesta = BindSocket(ip_dest, content, clienteDestino); } else if (this._vecinos.Contains(clienteDestino)) { //Si resulta que la dirección de destino es un GK vecino //enviamos usando el puerto para GK var match = this._vecinos .FirstOrDefault(stringToCheck => stringToCheck.Contains(clienteDestino)); this._port = Constants.PORT_SENDING_TO_GATEKEEPER; if (match != null) { BindSocket(IPAddress.Parse(match), content, clienteOrigen); } else { log.Warn("Aviso de incoherencia con neighbours.xml: El " + "vecino" + clienteDestino + "aparece en routes.xml" + "pero no en neihbours.xml."); } respuesta = ""; } else { log.Error("Destino no encontrado"); } } return(respuesta); }