/* returns: * method name * from TAG * to TAG * callid * sip_code * sip_status * */ int core2strar(struct sip_msg *req, str *c_vals, int *i_vals, char *t_vals) { struct to_body *ft_body; struct hdr_field *from; struct hdr_field *to; /* method : request/reply - cseq parsed in acc_preparse_req() */ c_vals[0] = get_cseq(req)->method; t_vals[0] = TYPE_STR; /* from/to URI and TAG */ if (req->msg_flags&FL_REQ_UPSTREAM) { LM_DBG("the flag UPSTREAM is set -> swap F/T\n"); \ from = acc_env.to; to = req->from; } else { from = req->from; to = acc_env.to; } if (from && (ft_body=get_ft_body(from)) && ft_body->tag_value.len) { c_vals[1] = ft_body->tag_value; t_vals[1] = TYPE_STR; } else { SET_EMPTY_VAL(1); t_vals[1] = TYPE_NULL; } if (to && (ft_body=get_ft_body(to)) && ft_body->tag_value.len) { c_vals[2] = ft_body->tag_value; t_vals[2] = TYPE_STR; } else { SET_EMPTY_VAL(2); t_vals[2] = TYPE_NULL; } /* Callid */ if (req->callid && req->callid->body.len) { c_vals[3] = req->callid->body; t_vals[3] = TYPE_STR; } else { SET_EMPTY_VAL(3); t_vals[3] = TYPE_NULL; } /* SIP code */ c_vals[4] = acc_env.code_s; i_vals[4] = acc_env.code; t_vals[4] = TYPE_INT; /* SIP status */ c_vals[5] = acc_env.reason; t_vals[5] = TYPE_STR; gettimeofday(&acc_env.tv, NULL); acc_env.ts = acc_env.tv.tv_sec; return ACC_CORE_LEN; }
/* returns: * method name * from TAG * to TAG * callid * sip_code * sip_status * */ static inline int core2strar( struct sip_msg *req, str *c_vals) { struct to_body *ft_body; struct hdr_field *from; struct hdr_field *to; /* method */ c_vals[0] = req->first_line.u.request.method; /* from/to URI and TAG */ if (req->msg_flags&FL_REQ_UPSTREAM) { LM_DBG("the flag UPSTREAM is set -> swap F/T\n"); \ from = acc_env.to; to = req->from; } else { from = req->from; to = acc_env.to; } if (from && (ft_body=get_ft_body(from)) && ft_body->tag_value.len) { c_vals[1] = ft_body->tag_value; } else { SET_EMPTY_VAL(1); } if (to && (ft_body=get_ft_body(to)) && ft_body->tag_value.len) { c_vals[2] = ft_body->tag_value; } else { SET_EMPTY_VAL(2); } /* Callid */ if (req->callid && req->callid->body.len) c_vals[3] = req->callid->body; else SET_EMPTY_VAL(3); /* SIP code */ c_vals[4] = acc_env.code_s; c_vals[5] = acc_env.reason; acc_env.ts = time(NULL); return ACC_CORE_LEN; }