Beispiel #1
0
/**
 * 	php_amqp_connect
 *	handles connecting to amqp
 *	called by connect() and reconnect()
 */
void php_amqp_connect(amqp_connection_object *amqp_connection)
{
	char str[256];
	char ** pstr = (char **) &str;
	void * old_handler;

	/* create the connection */
	amqp_connection->conn = amqp_new_connection();

	amqp_connection->fd = amqp_open_socket(amqp_connection->host, amqp_connection->port);

	if (amqp_connection->fd < 1) {
		/* Start ignoring SIGPIPE */
		old_handler = signal(SIGPIPE, SIG_IGN);

		amqp_destroy_connection(amqp_connection->conn);

		/* End ignoring of SIGPIPEs */
		signal(SIGPIPE, old_handler);

		zend_throw_exception(amqp_connection_exception_class_entry, "Socket error: could not connect to host.", 0 TSRMLS_CC);
		return;
	}
	amqp_connection->is_connected = '\1';

	amqp_set_sockfd(amqp_connection->conn, amqp_connection->fd);

	amqp_rpc_reply_t x = amqp_login(amqp_connection->conn, amqp_connection->vhost, 0, FRAME_MAX, AMQP_HEARTBEAT, AMQP_SASL_METHOD_PLAIN, amqp_connection->login, amqp_connection->password);

	if (x.reply_type != AMQP_RESPONSE_NORMAL) {
		amqp_error(x, pstr);
		zend_throw_exception(amqp_connection_exception_class_entry, *pstr, 0 TSRMLS_CC);
		return;
	}

	amqp_channel_open(amqp_connection->conn, AMQP_CHANNEL);

	x = amqp_get_rpc_reply(amqp_connection->conn);
	if (x.reply_type != AMQP_RESPONSE_NORMAL) {
		amqp_error(x, pstr);
		zend_throw_exception(amqp_connection_exception_class_entry, *pstr, 0 TSRMLS_CC);
		return;
	}

	amqp_connection->is_channel_connected = '\1';
}
Beispiel #2
0
static int check_pool_allocations(amqp_context_t *context, amqp_memory_pool_t *pool, const char *pool_name)
{
    if (pool->stats.outstanding_allocations != 0)
    {
        amqp_error(context, AMQP_ERROR_MEMORY_ERROR, "Pool  %s has %d outstanding allocations.", pool_name, pool->stats.outstanding_allocations);
        return false;
    }
    return true;
}
Beispiel #3
0
int amqp_throw_exception_on_error(amqp_connection_object* cnn)
{
        amqp_rpc_reply_t res = amqp_get_rpc_reply(cnn->conn);
        
        /* handle any errors that occured outside of signals */
        if (res.reply_type != AMQP_RESPONSE_NORMAL) {
                char str[256];
                char ** pstr = (char **) &str;
                amqp_error(res, pstr);
                cnn->is_connected = '\0';
                zend_throw_exception(amqp_exchange_exception_class_entry, *pstr, 0 TSRMLS_CC);
                return -1;
        }
        return 0;
}