/** * 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'; }
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; }
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; }