FreeCalypso > hg > themwi-system-sw
view libsip/uas_basic.c @ 69:8cf85edca543
sip-in: implement SIP ACK handling
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 19 Sep 2022 14:55:57 -0800 |
parents | 5427b26525cd |
children |
line wrap: on
line source
/* * Here we implement some essential UAS functions. */ #include <ctype.h> #include <string.h> #include <strings.h> #include <stdio.h> #include <stdlib.h> #include "parse.h" #include "uas_basic.h" #include "out_msg.h" extern char *get_single_header(); uas_get_basic_headers(msg, ess) struct sip_pkt_rx *msg; struct uas_parse_hdrs *ess; { char *hval, *cp; int dup_flag = 0; hval = get_single_header(msg, "Call-ID", "i", &dup_flag); if (!hval || dup_flag) { ess->error_field = "Call-ID"; return(-1); } ess->call_id = hval; hval = get_single_header(msg, "CSeq", (char *) 0, &dup_flag); if (!hval || dup_flag) { bad_cseq: ess->error_field = "CSeq"; return(-1); } if (!isdigit(*hval)) goto bad_cseq; ess->cseq_num = strtoul(hval, &cp, 10); if (*cp) { if (!isspace(*cp)) goto bad_cseq; while (isspace(*cp)) cp++; if (strcmp(cp, msg->req_method)) goto bad_cseq; } hval = get_single_header(msg, "From", "f", &dup_flag); if (!hval || dup_flag) { ess->error_field = "From"; return(-1); } ess->from = hval; hval = get_single_header(msg, "To", "t", &dup_flag); if (!hval || dup_flag) { ess->error_field = "To"; return(-1); } ess->to = hval; hval = get_single_header(msg, "Via", "v", &dup_flag); if (!hval || dup_flag) { ess->error_field = "Via"; return(-1); } ess->via = hval; return(0); } add_resp_basic_headers(msg, ess, req_method) struct sip_msg_out *msg; struct uas_parse_hdrs *ess; char *req_method; { char cseq_str[80]; int rc; rc = out_msg_add_header(msg, "From", ess->from); if (rc < 0) return rc; rc = out_msg_add_header(msg, "To", ess->to); if (rc < 0) return rc; rc = out_msg_add_header(msg, "Call-ID", ess->call_id); if (rc < 0) return rc; sprintf(cseq_str, "%u %.64s", ess->cseq_num, req_method); rc = out_msg_add_header(msg, "CSeq", cseq_str); if (rc < 0) return rc; return out_msg_add_header(msg, "Via", ess->via); }