Exemplo n.º 1
0
struct ao2_container *ast_sip_location_retrieve_aor_contacts(const struct ast_sip_aor *aor)
{
	struct ao2_container *contacts;
	struct ast_named_lock *lock;

	lock = ast_named_lock_get(AST_NAMED_LOCK_TYPE_RWLOCK, "aor", ast_sorcery_object_get_id(aor));
	if (!lock) {
		return NULL;
	}

	ao2_wrlock(lock);
	contacts = ast_sip_location_retrieve_aor_contacts_nolock(aor);
	ao2_unlock(lock);
	ast_named_lock_put(lock);

	return contacts;
}
Exemplo n.º 2
0
/*! \brief Allocator for AOR */
static void *aor_alloc(const char *name)
{
	void *lock;
	struct ast_sip_aor *aor;

	lock = ast_named_lock_get(AST_NAMED_LOCK_TYPE_MUTEX, "aor", name);
	if (!lock) {
		return NULL;
	}

	aor = ast_sorcery_lockable_alloc(sizeof(struct ast_sip_aor), aor_destroy, lock);
	ao2_ref(lock, -1);

	if (!aor) {
		return NULL;
	}
	ast_string_field_init(aor, 128);

	return aor;
}
Exemplo n.º 3
0
int ast_sip_location_add_contact(struct ast_sip_aor *aor, const char *uri,
		struct timeval expiration_time, const char *path_info, const char *user_agent,
		const char *via_addr, int via_port, const char *call_id,
		struct ast_sip_endpoint *endpoint)
{
	int res;
	struct ast_named_lock *lock;

	lock = ast_named_lock_get(AST_NAMED_LOCK_TYPE_RWLOCK, "aor", ast_sorcery_object_get_id(aor));
	if (!lock) {
		return -1;
	}

	ao2_wrlock(lock);
	res = ast_sip_location_add_contact_nolock(aor, uri, expiration_time, path_info, user_agent,
		via_addr, via_port, call_id,
		endpoint);
	ao2_unlock(lock);
	ast_named_lock_put(lock);

	return res;
}