update lcr_rate to a/b rating and update dependencies

pull/1/head
Richard Fuchs 13 years ago
parent d6d72c8515
commit a37c97e07a

2
debian/control vendored

@ -31,7 +31,7 @@ Build-Depends: bison,
libssl-dev,
libxml2-dev,
libxmlrpc-c3-dev,
ngcp-libswrate-dev (>= 1.0.8+0~1354556403.svn11955.90),
ngcp-libswrate-dev (>= 1.1.2+0~1364315461.svn13284.127),
python,
python-dev,
unixodbc-dev,

@ -115,7 +115,7 @@ static int check_swrate_init() {
return 0;
}
struct peer *load_peers(int *num, str *user, str *domain) {
struct peer *load_peers(int *num, char *src_user, char *src_domain, char *dst_user, char *dst_domain) {
struct usr_avp *avp;
int_str val;
struct peer *ret, *j;
@ -125,8 +125,8 @@ struct peer *load_peers(int *num, str *user, str *domain) {
swr_rate_t rate;
time_t now;
LM_DBG("loading peers for user <%.*s>@<%.*s> from avp\n",
user->len, user->s, domain->len, domain->s);
LM_DBG("loading peers for user <%s>@<%s> -> <%s>@<%s> from avp\n",
src_user, src_domain, dst_user, dst_domain);
len = 4;
ret = pkg_malloc(len * sizeof(*ret));
@ -182,10 +182,11 @@ struct peer *load_peers(int *num, str *user, str *domain) {
LM_DBG("finding rate for peer %u\n", j->id);
j->weight = i;
if (swrate_get_peer_rate(&rate, &swrate_handle, j->id, user->s, domain->s, now)) {
if (swrate_get_peer_ab_rate(&rate, &swrate_handle, j->id, src_user,
src_domain, dst_user, dst_domain, now)) {
pkg_free(ret);
LM_ERR("failed to get rate for call, peer id %u, user <%.*s>@<%.*s>\n",
j->id, user->len, user->s, domain->len, domain->s);
LM_ERR("failed to get rate for call, peer id %u, user <%s>@<%s> -> <%s>@<%s>\n",
j->id, src_user, src_domain, dst_user, dst_domain);
return NULL;
}
j->cost = rate.init_rate;
@ -227,24 +228,49 @@ static int save_peers(struct peer *peers, int num) {
return 0;
}
static void extract_ud(str *s, char **user, char **at, char **domain) {
*user = *at = *domain = NULL;
if (!s || !s->s || !*s->s)
return;
*user = s->s;
*at = strchr(*user, '@');
if (!*at)
return;
**at = '\0';
*domain = *at + 1;
if (!**domain)
*domain = NULL;
}
static int lcr_rate(sip_msg_t *msg, char *su, char *sq) {
struct peer *peers;
int num_peers;
str user, domain;
str src, dst;
char *src_user, *src_at, *src_domain;
char *dst_user, *dst_at, *dst_domain;
if (check_swrate_init())
return -1;
if (fixup_get_svalue(msg, (gparam_t *) su, &user)) {
if (fixup_get_svalue(msg, (gparam_t *) su, &src)) {
LM_ERR("failed to get user parameter\n");
return -1;
}
if (fixup_get_svalue(msg, (gparam_t *) sq, &domain)) {
if (fixup_get_svalue(msg, (gparam_t *) sq, &dst)) {
LM_ERR("failed to get domain parameter\n");
return -1;
}
peers = load_peers(&num_peers, &user, &domain);
extract_ud(&src, &src_user, &src_at, &src_domain);
extract_ud(&dst, &dst_user, &dst_at, &dst_domain);
peers = load_peers(&num_peers, src_user, src_domain, dst_user, dst_domain);
if (*src_at)
*src_at = '@';
if (*dst_at)
*dst_at = '@';
if (!peers)
return -1;
qsort(peers, num_peers, sizeof(*peers), peers_cmp);

Loading…
Cancel
Save