| 259 | } |
| 260 | |
| 261 | int mqueue_db_save_queue(str *name) |
| 262 | { |
| 263 | int ncols = 2; |
| 264 | db_key_t db_cols[2] = {&mq_db_key_column, &mq_db_val_column}; |
| 265 | db_val_t db_vals[2]; |
| 266 | int i; |
| 267 | int mqueue_sz = 0; |
| 268 | int ret = 0; |
| 269 | |
| 270 | if(mqueue_db_open_con() != 0) { |
| 271 | LM_ERR("no db connection\n"); |
| 272 | return -1; |
| 273 | } |
| 274 | |
| 275 | if(mq_dbf.use_table(mqueue_db_con, name) < 0) { |
| 276 | LM_ERR("failed to use_table\n"); |
| 277 | goto error; |
| 278 | } |
| 279 | |
| 280 | if(name->len <= 0 || name->s == NULL) { |
| 281 | LM_ERR("bad mqueue name\n"); |
| 282 | goto error; |
| 283 | } |
| 284 | |
| 285 | mqueue_sz = _mq_get_csize(name); |
| 286 | |
| 287 | if(mqueue_sz < 0) { |
| 288 | LM_ERR("no such mqueue\n"); |
| 289 | goto error; |
| 290 | } |
| 291 | for(i = 0; i < mqueue_sz; i++) { |
| 292 | ret = mq_head_fetch(name); |
| 293 | if(ret != 0) |
| 294 | break; |
| 295 | str *key = NULL; |
| 296 | str *val = NULL; |
| 297 | key = get_mqk(name); |
| 298 | val = get_mqv(name); |
| 299 | LM_DBG("inserting mqueue[%.*s] name[%.*s] value[%.*s]\n", name->len, |
| 300 | name->s, key->len, key->s, val->len, val->s); |
| 301 | db_vals[0].type = DB_STR; |
| 302 | db_vals[0].nul = 0; |
| 303 | db_vals[0].val.str_val.s = key->s; |
| 304 | db_vals[0].val.str_val.len = key->len; |
| 305 | db_vals[1].type = DB_STR; |
| 306 | db_vals[1].nul = 0; |
| 307 | db_vals[1].val.str_val.s = val->s; |
| 308 | db_vals[1].val.str_val.len = val->len; |
| 309 | LM_DBG("mq_dbf.insert()\n"); |
| 310 | if(mq_dbf.insert(mqueue_db_con, db_cols, db_vals, ncols) < 0) { |
| 311 | LM_ERR("failed to store key [%.*s] val [%.*s]\n", key->len, key->s, |
| 312 | val->len, val->s); |
| 313 | LM_DBG("done mq_dbf.insert()\n"); |
| 314 | } |
| 315 | } |
| 316 | |
| 317 | LM_INFO("queue [%.*s] saved in db\n", name->len, name->s); |
| 318 | mqueue_db_close_con(); |
no test coverage detected