diff --git a/modules/uac/uac_reg.c b/modules/uac/uac_reg.c index f614b3349c2..cadc47396bf 100644 --- a/modules/uac/uac_reg.c +++ b/modules/uac/uac_reg.c @@ -69,6 +69,7 @@ typedef struct _reg_uac unsigned int flags; unsigned int expires; time_t timer_expires; + unsigned int reg_delay; } reg_uac_t; typedef struct _reg_item @@ -117,6 +118,8 @@ str auth_username_column = str_init("auth_username"); str auth_password_column = str_init("auth_password"); str auth_proxy_column = str_init("auth_proxy"); str expires_column = str_init("expires"); +str flags_column = str_init("flags"); +str reg_delay_column = str_init("reg_delay"); #if 0 @@ -133,6 +136,8 @@ CREATE TABLE uacreg ( auth_password VARCHAR(64) NOT NULL, auth_proxy VARCHAR(128) DEFAULT '' NOT NULL, expires INT(10) UNSIGNED DEFAULT 0 NOT NULL, + flags INT(10) UNSIGNED DEFAULT 0 NOT NULL, + reg_delay INT(10) UNSIGNED DEFAULT 0 NOT NULL, CONSTRAINT l_uuid_idx UNIQUE (l_uuid) ) ENGINE=MyISAM; #endif @@ -1071,7 +1076,7 @@ int uac_reg_load_db(void) db1_con_t *reg_db_con = NULL; db_func_t reg_dbf; reg_uac_t reg; - db_key_t db_cols[10] = { + db_key_t db_cols[12] = { &l_uuid_column, &l_username_column, &l_domain_column, @@ -1081,7 +1086,9 @@ int uac_reg_load_db(void) &auth_username_column, &auth_password_column, &auth_proxy_column, - &expires_column + &expires_column, + &flags_column, + ®_delay_column }; db1_res_t* db_res = NULL; int i, ret; @@ -1120,7 +1127,7 @@ int uac_reg_load_db(void) } if (DB_CAPABILITY(reg_dbf, DB_CAP_FETCH)) { - if(reg_dbf.query(reg_db_con, 0, 0, 0, db_cols, 0, 10, 0, 0) < 0) + if(reg_dbf.query(reg_db_con, 0, 0, 0, db_cols, 0, 12, 0, 0) < 0) { LM_ERR("Error while querying db\n"); return -1; @@ -1172,6 +1179,10 @@ int uac_reg_load_db(void) reg_db_set_attr(auth_proxy, 8); reg.expires = (unsigned int)RES_ROWS(db_res)[i].values[9].val.int_val; + reg.flags + = (unsigned int)RES_ROWS(db_res)[i].values[10].val.int_val; + reg.reg_delay + = (unsigned int)RES_ROWS(db_res)[i].values[11].val.int_val; if(reg_ht_add(®)<0) { @@ -1212,7 +1223,7 @@ int uac_reg_db_refresh(str *pl_uuid) db1_con_t *reg_db_con = NULL; db_func_t reg_dbf; reg_uac_t reg; - db_key_t db_cols[10] = { + db_key_t db_cols[12] = { &l_uuid_column, &l_username_column, &l_domain_column, @@ -1222,7 +1233,9 @@ int uac_reg_db_refresh(str *pl_uuid) &auth_username_column, &auth_password_column, &auth_proxy_column, - &expires_column + &expires_column, + &flags_column, + ®_delay_column }; db_key_t db_keys[1] = {&l_uuid_column}; db_val_t db_vals[1]; @@ -1269,7 +1282,7 @@ int uac_reg_db_refresh(str *pl_uuid) db_vals[0].val.str_val.len = pl_uuid->len; if((ret=reg_dbf.query(reg_db_con, db_keys, NULL, db_vals, db_cols, - 1 /*nr keys*/, 10 /*nr cols*/, 0, &db_res))!=0 + 1 /*nr keys*/, 12 /*nr cols*/, 0, &db_res))!=0 || RES_ROW_N(db_res)<=0 ) { reg_dbf.free_result(reg_db_con, db_res); @@ -1300,6 +1313,8 @@ int uac_reg_db_refresh(str *pl_uuid) reg.expires = (unsigned int)RES_ROWS(db_res)[i].values[9].val.int_val; reg.h_uuid = reg_compute_hash(®.l_uuid); reg.h_user = reg_compute_hash(®.l_username); + reg.flags = (unsigned int)RES_ROWS(db_res)[i].values[10].val.int_val; + reg.reg_delay = (unsigned int)RES_ROWS(db_res)[i].values[11].val.int_val; lock_get(_reg_htable_gc_lock); if(reg_ht_get_byuuid(pl_uuid)!=NULL) @@ -1508,7 +1523,7 @@ static void rpc_uac_reg_dump(rpc_t* rpc, void* ctx) rpc->fault(ctx, 500, "Internal error creating rpc"); return; } - if(rpc->struct_add(th, "SSSSSSSSSdddd", + if(rpc->struct_add(th, "SSSSSSSSSddddd", "l_uuid", ®->r->l_uuid, "l_username", ®->r->l_username, "l_domain", ®->r->l_domain, @@ -1522,7 +1537,8 @@ static void rpc_uac_reg_dump(rpc_t* rpc, void* ctx) "expires", (int)reg->r->expires, "flags", (int)reg->r->flags, "diff_expires", (int)(reg->r->timer_expires - tn), - "timer_expires", (int)reg->r->timer_expires + "timer_expires", (int)reg->r->timer_expires, + "reg_delay", (int)reg->r->reg_delay )<0) { lock_release(&_reg_htable->entries[i].lock);