MCPcopy Create free account
hub / github.com/OpenSIPS/opensips / w_cache_raw_query

Function w_cache_raw_query

core_cmds.c:1376–1446  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1374}
1375
1376static int w_cache_raw_query(struct sip_msg *msg, str *id, str *raw_query_s,
1377 pvname_list_t *avp_list)
1378{
1379 cdb_raw_entry **cdb_reply = NULL;
1380 int num_cols=0,i,j;
1381 int num_rows=0;
1382 pvname_list_t *it;
1383 int_str avp_val;
1384 int_str avp_name;
1385 unsigned short avp_type;
1386 int ret;
1387
1388 if (!raw_query_s || !raw_query_s->s || !raw_query_s->len) {
1389 LM_ERR("raw query cannot be empty\n");
1390 return E_UNSPEC;
1391 }
1392
1393 if (!avp_list)
1394 return cachedb_raw_query(id, raw_query_s, NULL,0,NULL);
1395
1396 for (it=avp_list;it;it=it->next)
1397 num_cols++;
1398
1399 LM_DBG("The query expects %d fields per result\n", num_cols);
1400
1401 ret = cachedb_raw_query(id, raw_query_s, &cdb_reply, num_cols, &num_rows);
1402 if (ret >= 0 && num_cols > 0) {
1403 for (i=num_rows-1; i>=0;i--) {
1404 it=avp_list;
1405 for (j=0;j < num_cols;j++) {
1406 avp_type = 0;
1407 if (pv_get_avp_name(msg,&it->sname.pvp,&avp_name.n,
1408 &avp_type) != 0) {
1409 LM_ERR("cannot get avp name [%d/%d]\n",i,j);
1410 goto next_avp;
1411 }
1412
1413 switch (cdb_reply[i][j].type) {
1414 case CDB_INT32:
1415 avp_val.n = cdb_reply[i][j].val.n;
1416 break;
1417 case CDB_STR:
1418 avp_type |= AVP_VAL_STR;
1419 avp_val.s = cdb_reply[i][j].val.s;
1420 break;
1421 case CDB_NULL:
1422 avp_type |= AVP_VAL_NULL;
1423 avp_val.s = cdb_reply[i][j].val.s;
1424 break;
1425 default:
1426 LM_WARN("Unknown type %d\n",cdb_reply[i][j].type);
1427 goto next_avp;
1428 }
1429 if (add_avp(avp_type,avp_name.n,avp_val) != 0) {
1430 LM_ERR("Unable to add AVP\n");
1431 free_raw_fetch(cdb_reply,num_cols,num_rows);
1432 return -1;
1433 }

Callers

nothing calls this directly

Calls 4

cachedb_raw_queryFunction · 0.85
pv_get_avp_nameFunction · 0.85
add_avpFunction · 0.85
free_raw_fetchFunction · 0.85

Tested by

no test coverage detected