コード例 #1
0
ファイル: rabbitmq.c プロジェクト: rrb3942/opensips
/*
 * function that simply prints the parameters passed
 */
static int rmq_publish(struct sip_msg *msg, struct rmq_server *srv, str *srkey,
			str *sbody, str *sctype, pv_spec_t *hnames, pv_spec_t *hvals)
{
	int aname, avals;
	unsigned short type;

	if (hnames && !hvals) {
		LM_ERR("header names without values!\n");
		return -1;
	}
	if (!hnames && hvals) {
		LM_ERR("header values without names!\n");
		return -1;
	}

	if (hnames &&
			pv_get_avp_name(msg, &hnames->pvp, &aname, &type) < 0) {
		LM_ERR("cannot resolve names AVP\n");
		return -1;
	}

	if (hvals &&
			pv_get_avp_name(msg, &hvals->pvp, &avals, &type) < 0) {
		LM_ERR("cannot resolve values AVP\n");
		return -1;
	}

	/* resolve the AVP */
	return rmq_send(srv, srkey, sbody, sctype,
			(hnames ? &aname : NULL),
			(hvals ? &avals : NULL)) == 0 ? 1: -1;
}
コード例 #2
0
ファイル: event_rabbitmq.c プロジェクト: NormB/opensips
static void rmq_free(evi_reply_sock *sock)
{
    rmq_send_t *rmqs = shm_malloc(sizeof(rmq_send_t) + 1);
    if (!rmqs) {
        LM_ERR("no more shm memory\n");
        goto destroy;
    }
    rmqs->sock = sock;
    rmqs->msg[0] = 0;

    if (rmq_send(rmqs) < 0) {
        LM_ERR("cannot send message\n");
        goto destroy;
    }
    return;
destroy:
    if (rmqs)
        shm_free(rmqs);
    rmq_destroy(sock);
}
コード例 #3
0
ファイル: event_rabbitmq.c プロジェクト: NormB/opensips
static int rmq_raise(struct sip_msg *msg, str* ev_name,
                     evi_reply_sock *sock, evi_params_t * params)
{
    rmq_send_t *rmqs;
    int len;

    if (!sock || !(sock->flags & RMQ_FLAG)) {
        LM_ERR("invalid socket type\n");
        return -1;
    }
    /* sanity checks */
    if ((sock->flags & (EVI_ADDRESS|EVI_PORT|EVI_PARAMS)) !=
            (EVI_ADDRESS|EVI_PORT|EVI_PARAMS) ||
            !sock->port || !sock->address.len || !sock->address.s) {
        LM_ERR("socket doesn't have enough details\n");
        return -1;
    }

    /* check connection */
    /* build the params list */
    if ((len = rmq_build_params(ev_name, params)) < 0) {
        LM_ERR("error while building parameters list\n");
        return -1;
    }
    rmqs = shm_malloc(sizeof(rmq_send_t) + len);
    if (!rmqs) {
        LM_ERR("no more shm memory\n");
        return -1;
    }
    memcpy(rmqs->msg, rmq_buffer, len);
    rmqs->sock = sock;

    if (rmq_send(rmqs) < 0) {
        LM_ERR("cannot send message\n");
        shm_free(rmqs);
        return -1;
    }

    return 0;
}