コード例 #1
0
ファイル: notify.c プロジェクト: tamy83/baresip-android-mtt
static void response_handler(int err, const struct sip_msg *msg, void *arg)
{
	struct sipnot *not = arg;

	DEBUG_WARNING("re.sipevent.notify.response_handler()\n");

	if (err) {
		if (err == ETIMEDOUT)
			not->subscribed = false;
		goto out;
	}

	if (sip_request_loops(&not->ls, msg->scode)) {
		not->subscribed = false;
		goto out;
	}

	if (msg->scode < 200) {
		return;
	}
	else if (msg->scode < 300) {

		(void)sip_dialog_update(not->dlg, msg);
	}
	else {
		switch (msg->scode) {

		case 401:
		case 407:
			err = sip_auth_authenticate(not->auth, msg);
			if (err) {
				err = (err == EAUTH) ? 0 : err;
				break;
			}

			err = notify_request(not, false);
			if (err)
				break;

			return;
		}

		not->subscribed = false;
	}

 out:
	if (not->termsent) {
		mem_deref(not);
	}
	else if (not->terminated) {
		if (!not->subscribed || notify_request(not, true))
			mem_deref(not);
	}
	else if (!not->subscribed) {
		sipnot_terminate(not, err, msg, -1);
	}
	else if (not->notify_pending) {
		(void)notify_request(not, true);
	}
}
コード例 #2
0
ファイル: notify.c プロジェクト: nice-redbull/knot
int notify_create_request(const knot_zone_contents_t *zone, uint8_t *buffer,
                          size_t *size)
{
	const knot_rrset_t *soa_rrset = knot_node_rrset(
		            knot_zone_contents_apex(zone), KNOT_RRTYPE_SOA);
	if (soa_rrset == NULL) {
		return KNOT_ERROR;
	}

	return notify_request(soa_rrset, buffer, size);
}
コード例 #3
0
ファイル: notify.c プロジェクト: tamy83/baresip-android-mtt
int sipnot_notify(struct sipnot *not)
{
	if (not->expires == 0) {
		return 0;
	}

	if (not->req) {
		not->notify_pending = true;
		return 0;
	}

	return notify_request(not, true);
}
コード例 #4
0
ファイル: notify.c プロジェクト: tamy83/baresip-android-mtt
static bool terminate(struct sipnot *not, enum sipevent_reason reason)
{
	not->terminated = true;
	not->reason     = reason;
	not->closeh     = internal_close_handler;

	if (not->req) {
		mem_ref(not);
		return true;
	}

	if (not->subscribed && !notify_request(not, true)) {
		mem_ref(not);
		return true;
	}

	return false;
}