Skip to content

Commit

Permalink
registrar: control what values to add to xavp_rcd via xavp_rcd_mask
Browse files Browse the repository at this point in the history
  • Loading branch information
linuxmaniac committed Dec 11, 2019
1 parent 433551f commit 9593e3f
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 61 deletions.
35 changes: 21 additions & 14 deletions src/modules/registrar/lookup.c
Expand Up @@ -169,29 +169,36 @@ int xavp_rcd_helper(ucontact_t* ptr)

list = xavp_get(&reg_xavp_rcd, NULL);
xavp = list ? &list->val.v.xavp : &new_xavp;
memset(&xval, 0, sizeof(sr_xval_t));
xval.type = SR_XTYPE_STR;
xval.v.s = ptr->ruid;
xavp_add_value(&xname_ruid, &xval, xavp);

if(ptr->received.len > 0) {
if(!(reg_xavp_rcd_mask & AVP_RCD_RUID)) {
memset(&xval, 0, sizeof(sr_xval_t));
xval.type = SR_XTYPE_STR;
xval.v.s = ptr->ruid;
xavp_add_value(&xname_ruid, &xval, xavp);
}

if(!(reg_xavp_rcd_mask & AVP_RCD_RCV) && (ptr->received.len > 0)) {
memset(&xval, 0, sizeof(sr_xval_t));
xval.type = SR_XTYPE_STR;
xval.v.s = ptr->received;
xavp_add_value(&xname_received, &xval, xavp);
}

memset(&xval, 0, sizeof(sr_xval_t));
xval.type = SR_XTYPE_STR;
xval.v.s = ptr->c;
xavp_add_value(&xname_contact, &xval, xavp);
if(!(reg_xavp_rcd_mask & AVP_RCD_CNT)) {
memset(&xval, 0, sizeof(sr_xval_t));
xval.type = SR_XTYPE_STR;
xval.v.s = ptr->c;
xavp_add_value(&xname_contact, &xval, xavp);
}

memset(&xval, 0, sizeof(sr_xval_t));
xval.type = SR_XTYPE_INT;
xval.v.i = (int) (ptr->expires - time(0));
xavp_add_value(&xname_expires, &xval, xavp);
if(!(reg_xavp_rcd_mask & AVP_RCD_EXP)) {
memset(&xval, 0, sizeof(sr_xval_t));
xval.type = SR_XTYPE_INT;
xval.v.i = (int) (ptr->expires - time(0));
xavp_add_value(&xname_expires, &xval, xavp);
}

if(ptr->path.len > 0) {
if(!(reg_xavp_rcd_mask & AVP_RCD_PATH) && (ptr->path.len > 0)) {
memset(&xval, 0, sizeof(sr_xval_t));
xval.type = SR_XTYPE_STR;
xval.v.s = ptr->path;
Expand Down
4 changes: 4 additions & 0 deletions src/modules/registrar/lookup.h
Expand Up @@ -60,6 +60,10 @@ int lookup_to_dset(struct sip_msg* _m, udomain_t* _d, str* _uri);
*/
int lookup_branches(sip_msg_t *msg, udomain_t *d);

/*! \brief
* add xavp with details of the record (ruid, ...)
*/
int xavp_rcd_helper(ucontact_t* ptr);

/*! \brief
* Return true if the AOR in the Request-URI is registered,
Expand Down
3 changes: 2 additions & 1 deletion src/modules/registrar/registrar.c
Expand Up @@ -126,7 +126,7 @@ int_str rcv_avp_name;

str reg_xavp_cfg = {0};
str reg_xavp_rcd = {0};

int reg_xavp_rcd_mask = 0;
int reg_use_domain = 0;

int sock_flag = -1;
Expand Down Expand Up @@ -238,6 +238,7 @@ static param_export_t params[] = {
{"path_check_local", INT_PARAM, &path_check_local },
{"xavp_cfg", PARAM_STR, &reg_xavp_cfg },
{"xavp_rcd", PARAM_STR, &reg_xavp_rcd },
{"xavp_rcd_mask", INT_PARAM, &reg_xavp_rcd_mask },
{"gruu_enabled", INT_PARAM, &reg_gruu_enabled },
{"outbound_mode", INT_PARAM, &reg_outbound_mode },
{"regid_mode", INT_PARAM, &reg_regid_mode },
Expand Down
8 changes: 7 additions & 1 deletion src/modules/registrar/registrar.h
Expand Up @@ -67,6 +67,12 @@ extern int contact_max_size; /* configurable using module parameter "contact_max
* increases! */
#define REG_FLOW_TIMER_MAX 999

#define AVP_RCD_RUID 1
#define AVP_RCD_CNT 2
#define AVP_RCD_EXP 4
#define AVP_RCD_RCV 8
#define AVP_RCD_PATH 16

extern int nat_flag;
extern int tcp_persistent_flag;
extern int received_avp;
Expand Down Expand Up @@ -96,7 +102,7 @@ extern int sock_flag;

extern str reg_xavp_cfg;
extern str reg_xavp_rcd;

extern int reg_xavp_rcd_mask;
extern usrloc_api_t ul;/*!< Structure containing pointers to usrloc functions*/

extern sl_api_t slb;
Expand Down
47 changes: 2 additions & 45 deletions src/modules/registrar/reply.c
Expand Up @@ -40,6 +40,7 @@
#include "regtime.h"
#include "reply.h"
#include "config.h"
#include "lookup.h"

#define MAX_CONTACT_BUFFER 1024

Expand Down Expand Up @@ -173,14 +174,6 @@ int build_contact(sip_msg_t *msg, ucontact_t* c, str *host)
unsigned int ahash;
unsigned short digit;
int mode;
sr_xavp_t **xavp=NULL;
sr_xavp_t *list=NULL;
sr_xavp_t *new_xavp=NULL;
str xname = {"ruid", 4};
str ename = {"expires", 7};
sr_xval_t xval;



if(msg!=NULL && parse_supported(msg)==0
&& (get_supported(msg) & F_OPTION_TAG_GRUU))
Expand Down Expand Up @@ -210,13 +203,6 @@ int build_contact(sip_msg_t *msg, ucontact_t* c, str *host)
memcpy(p, CONTACT_BEGIN, CONTACT_BEGIN_LEN);
p += CONTACT_BEGIN_LEN;

/* add xavp with details of the record (ruid, ...) */
if(reg_xavp_rcd.s!=NULL)
{
list = xavp_get(&reg_xavp_rcd, NULL);
xavp = list ? &list->val.v.xavp : &new_xavp;
}

fl = 0;
while(c) {
if (VALID_CONTACT(c, act_time)) {
Expand Down Expand Up @@ -333,42 +319,13 @@ int build_contact(sip_msg_t *msg, ucontact_t* c, str *host)
}
if(reg_xavp_rcd.s!=NULL)
{
memset(&xval, 0, sizeof(sr_xval_t));
xval.type = SR_XTYPE_STR;
xval.v.s = c->ruid;

if(xavp_add_value(&xname, &xval, xavp)==NULL) {
LM_ERR("cannot add ruid value to xavp\n");
}
/* Add contact expiry */
memset(&xval, 0, sizeof(sr_xval_t));
xval.type = SR_XTYPE_INT;
xval.v.i = (int)(c->expires - act_time);

if(xavp_add_value(&ename, &xval, xavp)==NULL) {
LM_ERR("cannot add expires value to xavp\n");
}
xavp_rcd_helper(c);
}
}

c = c->next;
}

/* add xavp with details of the record (ruid, ...) */

if(reg_xavp_rcd.s!=NULL)
{
if(list==NULL && *xavp!=NULL)
{
xval.type = SR_XTYPE_XAVP;
xval.v.xavp = *xavp;
if(xavp_add_value(&reg_xavp_rcd, &xval, NULL)==NULL) {
LM_ERR("cannot add ruid xavp to root list\n");
xavp_destroy_list(xavp);
}
}
}

memcpy(p, CRLF, CRLF_LEN);
p += CRLF_LEN;

Expand Down

0 comments on commit 9593e3f

Please sign in to comment.