예제 #1
0
int streamxmit_close(STREAM_RTP_DEST_T *pDest, int lock) {
  int rc = 0;
  STREAM_XMIT_QUEUE_T *pAsyncQ;

  if(!pDest) {
    return -1;
  }

  pAsyncQ = &pDest->asyncQ;

  if(lock) {
    pthread_mutex_lock(&pDest->pRtpMulti->mtx);
  }
 
  if(pAsyncQ->pQ) {
    pktqueue_destroy(pAsyncQ->pQ);
    pAsyncQ->doAsyncXmit = 0;
    pAsyncQ->doRtcpNack = 0;
    pAsyncQ->pQ = NULL;
    pthread_mutex_destroy(&pAsyncQ->mtx);
  }

  burstmeter_close(&pAsyncQ->retransmissionMeter);

  if(lock) {
    pthread_mutex_unlock(&pDest->pRtpMulti->mtx);
  }

  return rc;
}
예제 #2
0
static void end(void)
{
	sessiondb_destroy();
	bibdb_destroy();
	pool6_destroy();
	pool4_destroy();
	pktqueue_destroy();
	config_destroy();
}
예제 #3
0
파일: db.c 프로젝트: pandax381/NAT64
void sessiondb_destroy(void)
{
	log_debug("Emptying the session tables...");

	sessiontable_destroy(&session_table_udp);
	sessiontable_destroy(&session_table_tcp);
	sessiontable_destroy(&session_table_icmp);

	pktqueue_destroy();
	session_destroy();
}
예제 #4
0
static bool init(void)
{
	int i;

	for (i = 0; i < ARRAY_SIZE(IPV4_ADDRS); i++) {
		if (is_error(str_to_addr4(IPV4_ADDRS[i], &addr4[i].l3)))
			return false;
		addr4[i].l4 = IPV4_PORTS[i];
	}

	for (i = 0; i < ARRAY_SIZE(IPV4_ADDRS); i++) {
		if (is_error(str_to_addr6(IPV6_ADDRS[i], &addr6[i].l3)))
			return false;
		addr6[i].l4 = IPV6_PORTS[i];
	}

	if (is_error(config_init(false)))
		goto config_fail;
	if (is_error(pktqueue_init()))
		goto pktqueue_fail;
	if (is_error(pool4_init(NULL, 0)))
		goto pool4_fail;
	if (is_error(pool6_init(NULL, 0)))
		goto pool6_fail;
	if (is_error(bibdb_init()))
		goto bib_fail;
	if (is_error(sessiondb_init()))
		goto session_fail;

	return true;

session_fail:
	bibdb_destroy();
bib_fail:
	pool6_destroy();
pool6_fail:
	pool4_destroy();
pool4_fail:
	pktqueue_destroy();
pktqueue_fail:
	config_destroy();
config_fail:
	return false;
}
예제 #5
0
void playerclose(void *hplayer)
{
    if (!hplayer) return;
    PLAYER *player = (PLAYER*)hplayer;

    player->nPlayerStatus = PS_CLOSE;
    renderstart(player->hCoreRender);

    //++ make sure packet queue not empty ++//
    if (pktqueue_isempty_a(&(player->PacketQueue))) {
        pktqueue_write_request(&(player->PacketQueue), NULL);
        pktqueue_write_done_a(&(player->PacketQueue));
    }

    if (pktqueue_isempty_v(&(player->PacketQueue))) {
        pktqueue_write_request(&(player->PacketQueue), NULL);
        pktqueue_write_done_v(&(player->PacketQueue));
    }
    //-- make sure packet queue not empty --//

    // wait audio/video demuxing thread exit
    pthread_join(player->hAVDemuxThread, NULL);

    // wait audio decoding thread exit
    pthread_join(player->hADecodeThread, NULL);

    // wait video decoding thread exit
    pthread_join(player->hVDecodeThread, NULL);

    // destroy packet queue
    pktqueue_destroy(&(player->PacketQueue));

    if (player->hCoreRender       ) renderclose(player->hCoreRender);
    if (player->pVideoCodecContext) avcodec_close(player->pVideoCodecContext);
    if (player->pAudioCodecContext) avcodec_close(player->pAudioCodecContext);
    if (player->pAVFormatContext  ) avformat_close_input(&(player->pAVFormatContext));

    free(player);

    // close log
//  log_done();
}
예제 #6
0
파일: nf_hook.c 프로젝트: magg/NAT64
static void __exit nat64_exit(void)
{
	/* Release the hook. */
	nf_unregister_hooks(nfho, ARRAY_SIZE(nfho));

	/* Deinitialize the submodules. */
#ifdef BENCHMARK
	logtime_destroy();
#endif
	sendpkt_destroy();
	translate_packet_destroy();
	filtering_destroy();
	fragdb_destroy();
	sessiondb_destroy();
	bibdb_destroy();
	pktqueue_destroy();
	pool4_destroy();
	pool6_destroy();
	config_destroy();

	log_info(MODULE_NAME " module removed.");
}
예제 #7
0
파일: init.c 프로젝트: patybarron/NAT64
bool init_full(void)
{
	char *prefixes[] = { "3::/96" };
	int error;

	error = config_init(false);
	if (error)
		goto config_fail;
	error = pool6_init(prefixes, ARRAY_SIZE(prefixes));
	if (error)
		goto pool6_fail;
	error = pool4_init(NULL, 0);
	if (error)
		goto pool4_fail;
	error = pktqueue_init();
	if (error)
		goto pktqueue_fail;
	error = bibdb_init();
	if (error)
		goto bibdb_fail;
	error = sessiondb_init();
	if (error)
		goto sessiondb_fail;

	return true;

sessiondb_fail:
	bibdb_destroy();
bibdb_fail:
	pktqueue_destroy();
pktqueue_fail:
	pool4_destroy();
pool4_fail:
	pool6_destroy();
pool6_fail:
	config_destroy();
config_fail:
	return false;
}
예제 #8
0
파일: session_test.c 프로젝트: magg/NAT64
static void end(void)
{
	sessiondb_destroy();
	pktqueue_destroy();
}
예제 #9
0
파일: nf_hook.c 프로젝트: magg/NAT64
static int __init nat64_init(void)
{
	int error;

	log_debug("%s", banner);
	log_debug("Inserting the module...");

	/* Init Jool's submodules. */
	error = config_init();
	if (error)
		goto config_failure;
	error = pool6_init(pool6, pool6_size);
	if (error)
		goto pool6_failure;
	error = pool4_init(pool4, pool4_size);
	if (error)
		goto pool4_failure;
	error = pktqueue_init();
	if (error)
		goto pktqueue_failure;
	error = bibdb_init();
	if (error)
		goto bib_failure;
	error = sessiondb_init();
	if (error)
		goto session_failure;
	error = fragdb_init();
	if (error)
		goto fragdb_failure;
	error = filtering_init();
	if (error)
		goto filtering_failure;
	error = translate_packet_init();
	if (error)
		goto translate_packet_failure;
	error = sendpkt_init();
	if (error)
		goto sendpkt_failure;
#ifdef BENCHMARK
	error = logtime_init();
	if (error)
		goto log_time_failure;
#endif

	/* Hook Jool to Netfilter. */
	error = nf_register_hooks(nfho, ARRAY_SIZE(nfho));
	if (error)
		goto nf_register_hooks_failure;

	/* Yay */
	log_info(MODULE_NAME " module inserted.");
	return error;

nf_register_hooks_failure:
#ifdef BENCHMARK
	logtime_destroy();

log_time_failure:
#endif
	sendpkt_destroy();

sendpkt_failure:
	translate_packet_destroy();

translate_packet_failure:
	filtering_destroy();

filtering_failure:
	fragdb_destroy();

fragdb_failure:
	sessiondb_destroy();

session_failure:
	bibdb_destroy();

bib_failure:
	pktqueue_destroy();

pktqueue_failure:
	pool4_destroy();

pool4_failure:
	pool6_destroy();

pool6_failure:
	config_destroy();

config_failure:
	return error;
}