| 1280 | } |
| 1281 | |
| 1282 | static int pv_get_diversion(struct sip_msg *msg, pv_param_t *param, |
| 1283 | pv_value_t *res) |
| 1284 | { |
| 1285 | str *val; |
| 1286 | str name; |
| 1287 | |
| 1288 | if(msg == NULL) |
| 1289 | return -1; |
| 1290 | |
| 1291 | if(parse_diversion_header(msg) == -1) |
| 1292 | { |
| 1293 | LM_DBG("no Diversion header\n"); |
| 1294 | return pv_get_null(msg, param, res); |
| 1295 | } |
| 1296 | |
| 1297 | if(msg->diversion == NULL || get_diversion(msg) == NULL) |
| 1298 | { |
| 1299 | LM_DBG("no Diversion header\n"); |
| 1300 | return pv_get_null(msg, param, res); |
| 1301 | } |
| 1302 | |
| 1303 | if(param->pvn.u.isname.name.n == 1) { /* uri */ |
| 1304 | return pv_get_strval(msg, param, res, &(get_diversion(msg)->uri)); |
| 1305 | } |
| 1306 | |
| 1307 | if(param->pvn.u.isname.name.n == 2) { /* reason param */ |
| 1308 | name.s = "reason"; |
| 1309 | name.len = 6; |
| 1310 | val = diversion_param(msg, name); |
| 1311 | if (val) { |
| 1312 | return pv_get_strval(msg, param, res, val); |
| 1313 | } else { |
| 1314 | return pv_get_null(msg, param, res); |
| 1315 | } |
| 1316 | } |
| 1317 | |
| 1318 | if(param->pvn.u.isname.name.n == 3) { /* privacy param */ |
| 1319 | name.s = "privacy"; |
| 1320 | name.len = 7; |
| 1321 | val = diversion_param(msg, name); |
| 1322 | if (val) { |
| 1323 | return pv_get_strval(msg, param, res, val); |
| 1324 | } else { |
| 1325 | return pv_get_null(msg, param, res); |
| 1326 | } |
| 1327 | } |
| 1328 | |
| 1329 | LM_ERR("unknown diversion specifier\n"); |
| 1330 | return pv_get_null(msg, param, res); |
| 1331 | } |
| 1332 | |
| 1333 | static int pv_get_rpid(struct sip_msg *msg, pv_param_t *param, |
| 1334 | pv_value_t *res) |
nothing calls this directly
no test coverage detected