1 /** 2 * @file cseq.c SIP CSeq decode 3 * 4 * Copyright (C) 2010 Creytiv.com 5 */ 6 #include <re_types.h> 7 #include <re_fmt.h> 8 #include <re_mbuf.h> 9 #include <re_uri.h> 10 #include <re_list.h> 11 #include <re_sa.h> 12 #include <re_msg.h> 13 #include <re_sip.h> 14 15 16 /** 17 * Decode a pointer-length string into a SIP CSeq header 18 * 19 * @param cseq SIP CSeq header 20 * @param pl Pointer-length string 21 * 22 * @return 0 for success, otherwise errorcode 23 */ sip_cseq_decode(struct sip_cseq * cseq,const struct pl * pl)24int sip_cseq_decode(struct sip_cseq *cseq, const struct pl *pl) 25 { 26 struct pl num; 27 int err; 28 29 if (!cseq || !pl) 30 return EINVAL; 31 32 err = re_regex(pl->p, pl->l, "[0-9]+[ \t\r\n]+[^ \t\r\n]+", 33 &num, NULL, &cseq->met); 34 if (err) 35 return err; 36 37 cseq->num = pl_u32(&num); 38 39 return 0; 40 } 41