es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Kamailio eliminando encabezados de respuesta.

Estoy trabajando en un proyecto donde necesito enviar una respuesta 302. Todo parece funcionar bien, excepto que no puedo eliminar ciertos encabezados, es decir, From, Contact, etc. (no quiero eliminarlos completamente, sino sustituirlos por mi propia versión). Utilizo KEMI con Lua para hacerlo:

KSR.hdr.remove("From")

Como mencioné, esto no funciona (mientras que otras funciones de hdr funcionan bien en el mismo contexto, especialmente KSR.hdr.append_to_reply(...)).

Decidí mirar el código fuente de Kamailio y encontré las siguientes líneas de código en el archivo kemi.c:

int sr_kemi_hdr_remove(sip_msg_t *msg, str *hname)
{
    ...
        anchor=del_lump(msg, hf->name.s - msg->buf, hf->len, 0);
        if (anchor==0) {
            LM_ERR("no se puede eliminar el encabezado %.*s\n", hname->len, hname->s);
            return -1;
        }
    }
    return 1;
}

Al mirar el último parámetro que toma del_lump, es de tipo _hdr_types_t que describe un enum de diferentes tipos de encabezados. Ahora, en particular para mí, estaba trabajando con tres encabezados:

  • From (tipo 4)
  • Contacto (tipo 7)
  • Otro (tipo 0)

Entonces, mi pregunta es, ¿por qué esa función está codificada para tomar solo encabezados OTROS, pero no otros, es decir, From y Contact? ¿Es eso para proteger de romper la solicitud SIP (eliminando inadvertidamente encabezados requeridos)?

Y como pregunta de seguimiento, ¿es posible eliminar From y Contact de los mensajes de respuesta?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Respuesta al Experto de TI – Eliminación de Encabezados en Kamailio usando KEMI con Lua

    Entendiendo el problema

    El problema en cuestión está relacionado con el proceso de eliminación y sustitución de ciertos encabezados en un proyecto que utiliza Kamailio. Se utilizó las siguientes líneas de código para eliminar un encabezado en KEMI con Lua:

    KSR.hdr.remove("From")
    

    Sin embargo, no funcionó para eliminar otros encabezados como el encabezado “Contact”. Al examinar el código fuente de Kamailio en el archivo “kemi.c”, el experto descubrió que la función del_lump codificó en duro la enum de diferentes tipos de encabezados para aceptar sólo encabezados OTHER, pero no otros como From y Contact, lo que llevó al experto a cuestionarse si fue para proteger la solicitud SIP (eliminando involuntariamente encabezados necesarios).

    Respondiendo a las preguntas

    La función del_lump en Kamailio sólo está codificada en duro para aceptar encabezados OTHER porque es una función de bajo nivel diseñada para eliminar cualquier fragmento de datos del mensaje que coincida con el tipo dado. Por lo tanto, no diferencia entre diferentes encabezados y en su lugar elimina cualquier dato que coincida con el tipo dado, lo que podría ser diferente de lo que se pretende y podría romper la solicitud SIP.

    En cuanto a la pregunta de seguimiento sobre si es posible eliminar From y Contact de las respuestas, técnicamente es posible, pero no se recomienda, ya que estos encabezados son necesarios para una comunicación SIP adecuada. En lugar de eliminarlos por completo, sería mejor sustituirlos por versiones personalizadas que cumplan el mismo propósito en la solicitud SIP.

    Conclusión

    En conclusión, si bien es posible eliminar encabezados de solicitudes SIP utilizando Kamailio, se debe tener precaución al hacerlo, ya que podría romper la solicitud. En su lugar, se recomienda sustituir los encabezados por versiones personalizadas para garantizar una comunicación SIP adecuada.

Comments are closed.