Exemple #1
0
static int agent_rcand_decode_add(struct trice *icem, const char *val)
{
	struct ice_cand_attr rcand;
	int err;

	err = ice_cand_attr_decode(&rcand, val);
	if (err)
		return err;

	/* add only if not exist */
	return trice_rcand_add(NULL, icem, rcand.compid,
			       rcand.foundation, rcand.proto,
			       rcand.prio, &rcand.addr,
			       rcand.type, rcand.tcptype);
}
TEST(media, ice_cand_decode)
{
	struct ice_cand_attr cand;
	struct sa addr;
	int err;

	err = ice_cand_attr_decode(&cand,
			      "42 1 udp 2113937151 10.0.0.63 2004 typ host");
	ASSERT_EQ(0, err);

	sa_set_str(&addr, "10.0.0.63", 2004);

	ASSERT_STREQ("42", cand.foundation);
	ASSERT_EQ(1, cand.compid);
	ASSERT_EQ(IPPROTO_UDP, cand.proto);
	ASSERT_EQ(2113937151, cand.prio);
	ASSERT_TRUE(sa_cmp(&addr, &cand.addr, SA_ALL));
	ASSERT_EQ(ICE_CAND_TYPE_HOST, cand.type);
}
	static void mediaflow_localcand_handler(
					const struct zapi_candidate *candv,
					size_t candc, void *arg)
	{
		TestMedia *tm = static_cast<TestMedia *>(arg);
		ASSERT_TRUE(tm->candc < ARRAY_SIZE(tm->candv));

		for (size_t i=0; i<candc; i++) {
			struct ice_cand_attr *cand = &tm->candv[tm->candc];
			const struct zapi_candidate *zcand = &candv[i];
			int err;

			if (0 == str_casecmp(zcand->sdp,
					     "a=end-of-candidates")) {
				++tm->n_local_eoc;
				continue;
			}

			tm->candc++;

			err = ice_cand_attr_decode(cand, zcand->sdp);
			ASSERT_EQ(0, err);

			ASSERT_STREQ("audio", zcand->mid);
			ASSERT_EQ(0, zcand->mline_index);

			/* verify that SRFLX and RELAY candidates contain
			   the related address */
			switch (cand->type) {

			case ICE_CAND_TYPE_SRFLX:
			case ICE_CAND_TYPE_RELAY:
				ASSERT_TRUE(sa_isset(&cand->rel_addr, SA_ALL));
				break;
			default:
				break;
			}
		}

		if (tm->candc >= tm->candc_expected)
			re_cancel();
	}