예제 #1
0
static Bool delete_dir(void *cbck, char *item_name, char *item_path, GF_FileEnumInfo *file_info)
{
	Bool directory_clean_mode = *(Bool*)cbck;

	if(directory_clean_mode) {
		gf_cleanup_dir(item_path);
		gf_rmdir(item_path);
	} else {
		gf_delete_file(item_path);
	}
	return 0;
}
예제 #2
0
파일: ait.c 프로젝트: gorinje/gpac-svn
static void gf_m2ts_process_ait(GF_M2TS_Demuxer *ts, GF_M2TS_AIT* ait){

	u32 nb_app_desc, k, desc_id, nb_of_app, j;
	GF_M2TS_CHANNEL_APPLICATION_INFO* ChanAppInfo;
	char *url_base, *url_appli_path;

	nb_of_app = gf_list_count(ait->application_decoded);
	url_base = NULL;
	url_appli_path = NULL;
	j=0;

	/* Link the AIT and the channel */
	ChanAppInfo = gf_m2ts_get_channel_application_info(ts->ChannelAppList,ait->service_id);	

	if(!ChanAppInfo){
		GF_SAFEALLOC(ChanAppInfo,GF_M2TS_CHANNEL_APPLICATION_INFO);
		ChanAppInfo->service_id = ait->service_id;
		ChanAppInfo->Application = gf_list_new();
		ChanAppInfo->ait_pid = ait->pid;
		gf_list_add(ts->ChannelAppList,ChanAppInfo);
	}

	ChanAppInfo->nb_application = nb_of_app;

	GF_LOG(GF_LOG_DEBUG, GF_LOG_CONTAINER, ("[DSMCC] ChanAppInfo->nb_application %d \n",ChanAppInfo->nb_application));
	
	for(j=0 ; j<nb_of_app ; j++){
		GF_M2TS_AIT_APPLICATION* Application;
		GF_M2TS_AIT_APPLICATION_DECODE* application_decoded;
		GF_SAFEALLOC(Application,GF_M2TS_AIT_APPLICATION);
		gf_list_add(ChanAppInfo->Application,Application);			
		Application->http_url = NULL;
		Application->carousel_url = NULL;

		application_decoded = (GF_M2TS_AIT_APPLICATION_DECODE*)gf_list_get(ait->application_decoded,j);
		nb_app_desc = gf_list_count(application_decoded->application_descriptors);
		Application->application_control_code = application_decoded->application_control_code;
		Application->application_id = application_decoded->application_id;
		Application->broadband = 0;
		Application->broadcast = 0;
		ChanAppInfo->version_number = ait->version_number;
		
		k=0;
		for(k=0 ; k<nb_app_desc ; k++){
			desc_id = application_decoded->application_descriptors_id[k];
			switch(desc_id){
							case APPLICATION_DESCRIPTOR:
								{
									GF_M2TS_APPLICATION_DESCRIPTOR* application_descriptor = (GF_M2TS_APPLICATION_DESCRIPTOR*)gf_list_get(application_decoded->application_descriptors,k);
									Application->priority = application_descriptor->application_priority;
									Application->application_profile = application_descriptor->application_profile;

									break;
								}
							case APPLICATION_NAME_DESCRIPTOR:
								{
									GF_M2TS_APPLICATION_NAME_DESCRIPTOR* name_descriptor = (GF_M2TS_APPLICATION_NAME_DESCRIPTOR*)gf_list_get(application_decoded->application_descriptors,k);
									Application->appli_name = gf_strdup(name_descriptor->application_name_char);
									break;
								}
							case TRANSPORT_PROTOCOL_DESCRIPTOR:
								{
									GF_M2TS_TRANSPORT_PROTOCOL_DESCRIPTOR* protocol_descriptor = (GF_M2TS_TRANSPORT_PROTOCOL_DESCRIPTOR*)gf_list_get(application_decoded->application_descriptors,k);

									switch(protocol_descriptor->protocol_id){
										case CAROUSEL:
											{									
												GF_Err e;												
												GF_M2TS_OBJECT_CAROUSEL_SELECTOR_BYTE* Carousel_selector_byte = (GF_M2TS_OBJECT_CAROUSEL_SELECTOR_BYTE*)protocol_descriptor->selector_byte;
												if(ts->process_dmscc){
													GF_M2TS_DSMCC_OVERLORD* dsmcc_overlord = gf_m2ts_get_dmscc_overlord(ts->dsmcc_controler,ait->service_id);
													Application->broadcast = 1;
													if(!dsmcc_overlord){
														char app_url[1024], char_service_id[128];
														
														memset(&app_url,0,1024*sizeof(char));
														memset(&char_service_id,0,128*sizeof(char));

														dsmcc_overlord = gf_m2ts_init_dsmcc_overlord(ait->service_id);
														dsmcc_overlord->application_id = Application->application_id;
														sprintf(char_service_id,"%d",dsmcc_overlord->service_id);
														dsmcc_overlord->root_dir = (char*)gf_calloc(strlen(ts->dsmcc_root_dir)+2+strlen(char_service_id),sizeof(char));
														sprintf(dsmcc_overlord->root_dir,"%s%c%s",ts->dsmcc_root_dir,GF_PATH_SEPARATOR,char_service_id);
														e = gf_mkdir(dsmcc_overlord->root_dir);
														if(e){															
															GF_LOG(GF_LOG_INFO, GF_LOG_CONTAINER, ("[Process DSMCC] Error during the creation of the directory %s \n",dsmcc_overlord->root_dir));
															if(e == GF_BAD_PARAM){
																gf_cleanup_dir(dsmcc_overlord->root_dir);
															}
														}
														sprintf(app_url,"%s%cindex.html",dsmcc_overlord->root_dir,GF_PATH_SEPARATOR);
														Application->carousel_url = gf_strdup(app_url);											
														gf_list_add(ts->dsmcc_controler,dsmcc_overlord);
													}
												}
												if(Carousel_selector_byte->remote_connection){
													Application->carousel_pid = Carousel_selector_byte->service_id;
												}
												Application->component_tag = Carousel_selector_byte->component_tag;

												break;
											}
										case TRANSPORT_HTTP:
											{
												GF_M2TS_TRANSPORT_HTTP_SELECTOR_BYTE* Transport_http_selector_byte = (GF_M2TS_TRANSPORT_HTTP_SELECTOR_BYTE*)protocol_descriptor->selector_byte;
												url_base = Transport_http_selector_byte->URL_base_byte;
												Application->broadband = 1;
											}
										default:
											{
											}
									}
									break;
								}
							case SIMPLE_APPLICATION_LOCATION_DESCRIPTOR:
								{
									GF_M2TS_SIMPLE_APPLICATION_LOCATION* Simple_application_location = (GF_M2TS_SIMPLE_APPLICATION_LOCATION*)gf_list_get(application_decoded->application_descriptors,k);
									url_appli_path = Simple_application_location->initial_path_bytes;
									break;
								}
							case APPLICATION_USAGE_DESCRIPTOR:
								{
									break;
								}
							default:
								{
									GF_LOG(GF_LOG_DEBUG, GF_LOG_MODULE, ("[Process AIT] Descriptor tag %d unknown, ignoring the descriptor \n",desc_id));
								}
			}

			if((url_base != NULL) && ( url_appli_path != NULL)){
				u32 url_length = (strlen(url_base)+strlen(url_appli_path));
				Application->http_url = (char*)gf_calloc(url_length + 1,sizeof(char));
				sprintf(Application->http_url,"%s%s",url_base,url_appli_path);
				Application->http_url[url_length]=0;
				Application->url_received = 1;
				url_base = NULL;
				url_appli_path = NULL;
				GF_LOG(GF_LOG_INFO, GF_LOG_MODULE, ("[Process AIT] SERVICE ID %d  URL %s  \n",ChanAppInfo->service_id,Application->http_url));
			}

		}
	}
	if(ts->process_dmscc){
		GF_M2TS_DSMCC_OVERLORD* dsmcc_overlord = gf_m2ts_get_dmscc_overlord(ts->dsmcc_controler,ait->service_id);

		if(dsmcc_overlord && !gf_m2ts_is_dmscc_app(ChanAppInfo)){			
			gf_cleanup_dir(dsmcc_overlord->root_dir);
			gf_rmdir(dsmcc_overlord->root_dir);	
			gf_m2ts_delete_dsmcc_overlord(dsmcc_overlord);

		}
	}
}