Skip to content

Commit

Permalink
dispatcher: reorganize the code by using a define
Browse files Browse the repository at this point in the history
  • Loading branch information
ovidiusas committed Feb 26, 2014
1 parent 79bc8d7 commit bc4ccbe
Showing 1 changed file with 28 additions and 210 deletions.
238 changes: 28 additions & 210 deletions modules/dispatcher/dispatcher.c
Expand Up @@ -485,6 +485,24 @@ static void destroy(void)
}


#define GET_VALUE(param_name,param,i_value,s_value,value_flags) \
if(fixup_get_isvalue(msg, (gparam_p)(param), &(i_value), &(s_value), &(value_flags))!=0) { \
LM_ERR("no %s value\n", (param_name)); \
return -1; \
} \
if(!((value_flags)&GPARAM_INT_VALUE_FLAG)) { \
if((value_flags)&GPARAM_STR_VALUE_FLAG) { \
if(str2sint(&(s_value), &(i_value))!=0) { \
LM_ERR("Unable to get %s from [%.*s]\n", (param_name), (s_value).len, (s_value).s); \
return -1; \
} \
} else { \
LM_ERR("unexpected %s flags [%u]\n", (param_name), (value_flags)); \
return -1; \
} \
} \


/**
*
*/
Expand All @@ -499,50 +517,10 @@ static int w_ds_select_dst(struct sip_msg* msg, char* set, char* alg)
return -1;

/* Retrieve dispatcher set */
if(fixup_get_isvalue(msg, (gparam_p)set, &i_set, &s_set, &set_flags)!=0)
{
LM_ERR("no dst set value\n");
return -1;
}
if(!(set_flags&GPARAM_INT_VALUE_FLAG))
{
if(set_flags&GPARAM_STR_VALUE_FLAG)
{
if(str2sint(&s_set, &i_set)!=0)
{
LM_ERR("Unable to get set from [%.*s]\n", s_set.len, s_set.s);
return -1;
}
}
else
{
LM_ERR("unexpected set flags [%ud]\n", set_flags);
return -1;
}
}
GET_VALUE("destination set", set, i_set, s_set, set_flags);

/* Retrieve dispatcher algorithm */
if(fixup_get_isvalue(msg, (gparam_p)alg, &i_algo, &s_algo, &algo_flags)!=0)
{
LM_ERR("no alg value\n");
return -1;
}
if(!(algo_flags&GPARAM_INT_VALUE_FLAG))
{
if(algo_flags&GPARAM_STR_VALUE_FLAG)
{
if(str2sint(&s_algo, &i_algo)!=0)
{
LM_ERR("Unable to get algo from [%.*s]\n", s_algo.len, s_algo.s);
return -1;
}
}
else
{
LM_ERR("unexpected algo flags [%u]\n", algo_flags);
return -1;
}
}
GET_VALUE("algorithm", alg, i_algo, s_algo, algo_flags);

return ds_select_dst(msg, i_set, i_algo, 0 /*set dst uri*/, 1000);
}
Expand All @@ -563,73 +541,13 @@ static int w_ds_select_dst_limited(struct sip_msg* msg, char* set, char* alg, ch
return -1;

/* Retrieve dispatcher set */
if(fixup_get_isvalue(msg, (gparam_p)set, &i_set, &s_set, &set_flags)!=0)
{
LM_ERR("no dst set value\n");
return -1;
}
if(!(set_flags&GPARAM_INT_VALUE_FLAG))
{
if(set_flags&GPARAM_STR_VALUE_FLAG)
{
if(str2sint(&s_set, &i_set)!=0)
{
LM_ERR("Unable to get set from [%.*s]\n", s_set.len, s_set.s);
return -1;
}
}
else
{
LM_ERR("unexpected set flags [%u]\n", set_flags);
return -1;
}
}
GET_VALUE("destination set", set, i_set, s_set, set_flags);

/* Retrieve dispatcher algorithm */
if(fixup_get_isvalue(msg, (gparam_p)alg, &i_algo, &s_algo, &algo_flags)!=0)
{
LM_ERR("no alg value\n");
return -1;
}
if(!(algo_flags&GPARAM_INT_VALUE_FLAG))
{
if(algo_flags&GPARAM_STR_VALUE_FLAG)
{
if(str2sint(&s_algo, &i_algo)!=0)
{
LM_ERR("Unable to get algo from [%.*s]\n", s_algo.len, s_algo.s);
return -1;
}
}
else
{
LM_ERR("unexpected algo flags [%u]\n", algo_flags);
return -1;
}
}
GET_VALUE("algorithm", alg, i_algo, s_algo, algo_flags);

/* Retrieve dispatcher max results */
if(fixup_get_isvalue(msg, (gparam_p)max_results, &i_max, &s_max, &max_flags)!=0)
{
LM_ERR("no max results value\n");
return -1;
}
if(!(max_flags&GPARAM_INT_VALUE_FLAG))
{
if(max_flags&GPARAM_STR_VALUE_FLAG)
{
if(str2sint(&s_max, &i_max)!=0)
{
LM_ERR("Unable to get max results from [%.*s]\n", s_max.len, s_max.s);
return -1;
}
}
else
{
LM_ERR("unexpected max results flags [%u]\n", max_flags);
return -1;
}
}
GET_VALUE("max results", max_results, i_max, s_max, max_flags);

return ds_select_dst(msg, i_set, i_algo, 0 /*set dst uri*/, i_max);
}
Expand All @@ -649,50 +567,10 @@ static int w_ds_select_domain(struct sip_msg* msg, char* set, char* alg)
return -1;

/* Retrieve dispatcher set */
if(fixup_get_isvalue(msg, (gparam_p)set, &i_set, &s_set, &set_flags)!=0)
{
LM_ERR("no dst set value\n");
return -1;
}
if(!(set_flags&GPARAM_INT_VALUE_FLAG))
{
if(set_flags&GPARAM_STR_VALUE_FLAG)
{
if(str2sint(&s_set, &i_set)!=0)
{
LM_ERR("Unable to get set from [%.*s]\n", s_set.len, s_set.s);
return -1;
}
}
else
{
LM_ERR("unexpected set flags [%ud]\n", set_flags);
return -1;
}
}
GET_VALUE("destination set", set, i_set, s_set, set_flags);

/* Retrieve dispatcher algorithm */
if(fixup_get_isvalue(msg, (gparam_p)alg, &i_algo, &s_algo, &algo_flags)!=0)
{
LM_ERR("no alg value\n");
return -1;
}
if(!(algo_flags&GPARAM_INT_VALUE_FLAG))
{
if(algo_flags&GPARAM_STR_VALUE_FLAG)
{
if(str2sint(&s_algo, &i_algo)!=0)
{
LM_ERR("Unable to get algo from [%.*s]\n", s_algo.len, s_algo.s);
return -1;
}
}
else
{
LM_ERR("unexpected algo flags [%u]\n", algo_flags);
return -1;
}
}
GET_VALUE("algorithm", alg, i_algo, s_algo, algo_flags);

return ds_select_dst(msg, i_set, i_algo, 1/*set host port*/, 1000);
}
Expand All @@ -713,73 +591,13 @@ static int w_ds_select_domain_limited(struct sip_msg* msg, char* set, char* alg,
return -1;

/* Retrieve dispatcher set */
if(fixup_get_isvalue(msg, (gparam_p)set, &i_set, &s_set, &set_flags)!=0)
{
LM_ERR("no dst set value\n");
return -1;
}
if(!(set_flags&GPARAM_INT_VALUE_FLAG))
{
if(set_flags&GPARAM_STR_VALUE_FLAG)
{
if(str2sint(&s_set, &i_set)!=0)
{
LM_ERR("Unable to get set from [%.*s]\n", s_set.len, s_set.s);
return -1;
}
}
else
{
LM_ERR("unexpected set flags [%u]\n", set_flags);
return -1;
}
}
GET_VALUE("destination set", set, i_set, s_set, set_flags);

/* Retrieve dispatcher algorithm */
if(fixup_get_isvalue(msg, (gparam_p)alg, &i_algo, &s_algo, &algo_flags)!=0)
{
LM_ERR("no alg value\n");
return -1;
}
if(!(algo_flags&GPARAM_INT_VALUE_FLAG))
{
if(algo_flags&GPARAM_STR_VALUE_FLAG)
{
if(str2sint(&s_algo, &i_algo)!=0)
{
LM_ERR("Unable to get algo from [%.*s]\n", s_algo.len, s_algo.s);
return -1;
}
}
else
{
LM_ERR("unexpected algo flags [%u]\n", algo_flags);
return -1;
}
}
GET_VALUE("algorithm", alg, i_algo, s_algo, algo_flags);

/* Retrieve dispatcher max results */
if(fixup_get_isvalue(msg, (gparam_p)max_results, &i_max, &s_max, &max_flags)!=0)
{
LM_ERR("no max results value\n");
return -1;
}
if(!(max_flags&GPARAM_INT_VALUE_FLAG))
{
if(max_flags&GPARAM_STR_VALUE_FLAG)
{
if(str2sint(&s_max, &i_max)!=0)
{
LM_ERR("Unable to get max results from [%.*s]\n", s_max.len, s_max.s);
return -1;
}
}
else
{
LM_ERR("unexpected max results flags [%u]\n", max_flags);
return -1;
}
}
GET_VALUE("max results", max_results, i_max, s_max, max_flags);

return ds_select_dst(msg, i_set, i_algo, 1/*set host port*/, i_max);
}
Expand Down

0 comments on commit bc4ccbe

Please sign in to comment.