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?
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:
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 laenum
de diferentes tipos de encabezados para aceptar sólo encabezadosOTHER
, pero no otros comoFrom
yContact
, 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 encabezadosOTHER
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
yContact
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.