Ejemplo n.º 1
0
static void
on_flush_done(lcbio_CTX *ctx, unsigned expected, unsigned actual)
{
    mc_SERVER *server = lcbio_ctx_data(ctx);
    mcreq_flush_done(&server->pipeline, actual, expected);
    check_closed(server);
}
Ejemplo n.º 2
0
void ConnectionContext::Shutdown()
{
	if (!check_closed() && type_ & ConnectionContext::ssl) {
		if (sync_compare_and_swap(&shutdown_flag_, 0, 1))
			sync_inc(&ref_);
			ssl_stream_->asyn_shutdown(&IOCPWebServer::on_shutdown, this);
	}
}
Ejemplo n.º 3
0
void ConnectionContext::Send(const char *buf, int len)
{
	if (check_closed())
		return;
	sync_inc(&ref_);
	if (ssl_stream_)
		ssl_stream_->asyn_send(buf, len, &IOCPWebServer::on_send, this);
	else
		tcp_stream_->asyn_send(buf, len, &IOCPWebServer::on_send, this);
}
Ejemplo n.º 4
0
void ConnectionContext::Recv(char *buf, int len)
{
	if (check_closed())
		return;
	sync_inc(&ref_);
	if (ssl_stream_)
		ssl_stream_->asyn_recv_some(buf, len, &IOCPWebServer::on_receive, this);
	else
		tcp_stream_->asyn_recv_some(buf, len, &IOCPWebServer::on_receive, this);
}
Ejemplo n.º 5
0
void ConnectionContext::Handshake()
{
	if (!check_closed() && type_ & ConnectionContext::ssl) {
		sync_inc(&ref_);
		if (type_ == ConnectionContext::https)
			ssl_stream_->asyn_handshake(ssl::server, &IOCPWebServer::on_handshake, this);
		else
			ssl_stream_->asyn_handshake(ssl::client, &IOCPWebServer::on_handshake, this);
	}
}
Ejemplo n.º 6
0
void ConnectionContext::Connect(const char *pszIP, unsigned short port)
{
	if (!check_closed()) {
		sync_inc(&ref_);
		if (ssl_stream_)
			ssl_stream_->asyn_connect(pszIP, port, &IOCPWebServer::on_connect, this);
		else
			tcp_stream_->asyn_connect(pszIP, port, &IOCPWebServer::on_connect, this);
	}
}
Ejemplo n.º 7
0
static void
on_flush_done(lcbio_CTX *ctx, unsigned expected, unsigned actual)
{
    mc_SERVER *server = lcbio_ctx_data(ctx);
    lcb_U64 now = 0;
    if (server->settings->readj_ts_wait) {
        now = gethrtime();
    }

    mcreq_flush_done_ex(&server->pipeline, actual, expected, now);
    check_closed(server);
}
Ejemplo n.º 8
0
/*
 * @yield [Package] Called for each match
 * @param [Number] key RPM tag key
 * @param [String] val Value to match
 * @example
 *   db.each_match(RPM::TAG_ARCH, "x86_64") do |pkg|
 *     puts pkg.name
 *   end
 */
VALUE
rpm_db_each_match(VALUE db, VALUE key, VALUE val)
{
	VALUE mi;

	check_closed(db);

	mi = rpm_db_init_iterator (db, key, val);

	if (!NIL_P(mi))
		return rpm_mi_each (mi);
        return Qnil;
}
Ejemplo n.º 9
0
VALUE
rpm_db_init_iterator(VALUE db, VALUE key, VALUE val)
{
	rpm_mi_t* mi;

	check_closed(db);

	if (!NIL_P(val) && TYPE(val) != T_STRING) {
		rb_raise(rb_eTypeError, "illegal argument type");
	}

	mi = ALLOC_N(rpm_mi_t,1);
	if ((mi->mi = rpmdbInitIterator(RPM_DB(db), NUM2INT(rb_Integer(key)),
						   NIL_P(val) ? NULL : RSTRING_PTR(val),
                           NIL_P(val) ? 0 : RSTRING_LEN(val)))){
		mi->db = (rpm_db_t*)DATA_PTR(db);
		db_ref(mi->db);
		return Data_Wrap_Struct(rpm_cMatchIterator, NULL, mi_free, mi);
	}
	free(mi);
    /* FIXME: returning nil here is a pain; for ruby, it would be nicer
       to return an empty array */
	return Qnil;
}
Ejemplo n.º 10
0
/*
 * @yield [Package] Called for each package in the database
 * @example
 *   db.each do |pkg|
 *     puts pkg.name
 *   end
 */
VALUE
rpm_db_each(VALUE db)
{
	check_closed(db);
	return rpm_db_each_match(db,INT2NUM(RPMDBI_PACKAGES),Qnil);
}
Ejemplo n.º 11
0
/*
 * @return [Boolean] +true+ if the database is writable
 */
VALUE
rpm_db_is_writable(VALUE db)
{
	check_closed(db);
	return OBJ_FROZEN(db) ? Qfalse : Qtrue;
}
Ejemplo n.º 12
0
/*
 * @return [String] The home path of the database
 */
VALUE
rpm_db_get_home(VALUE db)
{
	check_closed(db);
	return rb_str_new2(RPM_DB(db)->db_home);
}
Ejemplo n.º 13
0
/*
 * @return [String] The root path of the database
 */
VALUE
rpm_db_get_root(VALUE db)
{
	check_closed(db);
	return rb_str_new2(RPM_DB(db)->db_root);
}