Estoy tratando de analizar un paquete SIP y obtener algo de información de él. Para ser más específicos, el paquete se parece a estopaquete Parse SIP en C
REGISTER sip:open-ims.test SIP/2.0
Via: SIP/2.0/UDP 192.168.1.64:5060;rport;branch=z9hG4bK1489975971
From: <sip:[email protected]>;tag=1627897650
To: <sip:[email protected]>
Call-ID: 1097412971
CSeq: 1 REGISTER
Contact: <sip:[email protected]:5060;line=5fc3b39f127158d>;+sip.instance="<urn:uuid:46f525fe-3f60-11e0-bec1-d965d1488cfa>"
Authorization: Digest username="[email protected]", realm="open-ims.test", nonce=" ", uri="sip:open-ims.test", response=" "
Max-Forwards: 70
User-Agent: UCT IMS Client
Expires: 600000
Supported: path
Supported: gruu
Content-Length: 0
Ahora, a partir de ese paquete que necesito para extraer lo siguiente:
- El valor después de "De:" (en este caso
<sip:[email protected]>
) - El valor después de "Contacto" (en este caso
<sip:[email protected]
) - El valor después de "nombre de usuario" (en este caso
[email protected]
)
Mi código hasta ahora es este
char * tch;
char * saved;
tch = strtok (payload,"<>;");
while (tch != NULL)
{
int savenext = 0;
if (!strcmp(tch, "From: "))
{
savenext = 1;
}
tch = strtok (NULL, "<>;");
if (savenext == 1)
{
saved = tch;
}
}
printf ("### SIP Contact: %s ###\n", saved);
}
}
Dónde carga útil contiene el paquete como se describió anteriormente.
Sin embargo, cuando ejecuto mi programa, se producirá un error de segmentación. Lo extraño es que si uso en strtok los caracteres "<> ;:" y en strcmp el valor "sip", el mensaje se analizará correctamente y mantendrá el valor guardado. Pero necesito analizar los tres valores superiores.
¿Una biblioteca de sorbos podría ayudarme más con mi problema?
Gracias de antemano
En general, cuando necesita analizar o construir texto estructurado como este, es una buena idea usar una biblioteca porque siempre hay casos de esquina en la codificación que tendría que manejar, y alguien más ha hecho ese trabajo por usted . Asumiendo, es decir, puede encontrar algo simple y lo suficientemente liviano para vincularse con lo que está haciendo. – Rup