/* Return the size of the specified mqueue */ static void mqueue_rpc_get_size(rpc_t* rpc, void* ctx) { void* vh; str mqueue_name; int mqueue_sz = 0; if (rpc->scan(ctx, "S", &mqueue_name) < 1) { rpc->fault(ctx, 500, "No queue name"); return; } if(mqueue_name.len <= 0 || mqueue_name.s == NULL) { LM_ERR("bad mqueue name\n"); rpc->fault(ctx, 500, "Invalid queue name"); return; } mqueue_sz = _mq_get_csize(&mqueue_name); if(mqueue_sz < 0) { LM_ERR("no such mqueue\n"); rpc->fault(ctx, 500, "No such queue"); return; } if (rpc->add(ctx, "{", &vh) < 0) { rpc->fault(ctx, 500, "Server error"); return; } rpc->struct_add(vh, "Sd", "name", &mqueue_name, "size", mqueue_sz); }
static int w_mq_size(struct sip_msg *msg, char *mq, char *str2) { int ret; str q; if(fixup_get_svalue(msg, (gparam_t *) mq, &q) < 0) { LM_ERR("cannot get queue parameter\n"); return -1; } ret = _mq_get_csize(&q); if(ret < 0) LM_ERR("mqueue not found\n"); return ret; }
int pv_get_mq_size(struct sip_msg *msg, pv_param_t *param, pv_value_t *res) { int mqs = -1; str *in = pv_get_mq_name(msg, ¶m->pvn.u.isname.name.s); if (in == NULL) { LM_ERR("failed to get mq name\n"); return -1; } mqs = _mq_get_csize(in); if (mqs < 0) { LM_ERR("mqueue not found: %.*s\n", in->len, in->s); return -1; } return pv_get_sintval(msg, param, res, mqs); }
static struct mi_root *mq_mi_get_size(struct mi_root *cmd_tree, void *param) { static struct mi_node *node = NULL, *rpl = NULL; static struct mi_root *rpl_tree = NULL; static struct mi_attr *attr = NULL; str mqueue_name; int mqueue_sz = 0; char *p = NULL; int len = 0; if((node = cmd_tree->node.kids) == NULL) { return init_mi_tree(400, MI_MISSING_PARM_S, MI_MISSING_PARM_LEN); } mqueue_name = node->value; if(mqueue_name.len <= 0 || mqueue_name.s == NULL) { LM_ERR("bad mqueue name\n"); return init_mi_tree(500, MI_SSTR("bad mqueue name")); } mqueue_sz = _mq_get_csize(&mqueue_name); if(mqueue_sz < 0) { LM_ERR("no such mqueue\n"); return init_mi_tree(404, MI_SSTR("no such mqueue")); } rpl_tree = init_mi_tree(200, MI_OK_S, MI_OK_LEN); if(rpl_tree == NULL) return 0; rpl = &rpl_tree->node; node = add_mi_node_child(rpl, MI_DUP_VALUE, "mqueue", strlen("mqueue"), NULL, 0); if(node == NULL) { free_mi_tree(rpl_tree); return NULL; } attr = add_mi_attr(node, MI_DUP_VALUE, "name", strlen("name"), mqueue_name.s, mqueue_name.len); if(attr == NULL) goto error; p = int2str((unsigned long) mqueue_sz, &len); attr = add_mi_attr(node, MI_DUP_VALUE, "size", strlen("size"), p, len); if(attr == NULL) goto error; return rpl_tree; error: free_mi_tree(rpl_tree); return NULL; }