int avfilter_config_links(AVFilterContext *filter) { int (*config_link)(AVFilterLink *); unsigned i; int ret; for (i = 0; i < filter->input_count; i ++) { AVFilterLink *link = filter->inputs[i]; if (!link) continue; switch (link->init_state) { case AVLINK_INIT: continue; case AVLINK_STARTINIT: av_log(filter, AV_LOG_INFO, "circular filter chain detected\n"); return 0; case AVLINK_UNINIT: link->init_state = AVLINK_STARTINIT; if ((ret = avfilter_config_links(link->src)) < 0) return ret; if (!(config_link = link->srcpad->config_props)) config_link = avfilter_default_config_output_link; if ((ret = config_link(link)) < 0) return ret; if (link->time_base.num == 0 && link->time_base.den == 0) link->time_base = link->src && link->src->input_count ? link->src->inputs[0]->time_base : AV_TIME_BASE_Q; if (link->sample_aspect_ratio.num == 0 && link->sample_aspect_ratio.den == 0) link->sample_aspect_ratio = link->src->input_count ? link->src->inputs[0]->sample_aspect_ratio : (AVRational){1,1}; if ((config_link = link->dstpad->config_props)) if ((ret = config_link(link)) < 0) return ret; link->init_state = AVLINK_INIT; } } return 0; }
int avfilter_config_links(AVFilterContext *filter) { int (*config_link)(AVFilterLink *); unsigned i; int ret; for (i = 0; i < filter->nb_inputs; i ++) { AVFilterLink *link = filter->inputs[i]; AVFilterLink *inlink; if (!link) continue; if (!link->src || !link->dst) { av_log(filter, AV_LOG_ERROR, "Not all input and output are properly linked (%d).\n", i); return AVERROR(EINVAL); } inlink = link->src->nb_inputs ? link->src->inputs[0] : NULL; link->current_pts = AV_NOPTS_VALUE; switch (link->init_state) { case AVLINK_INIT: continue; case AVLINK_STARTINIT: av_log(filter, AV_LOG_INFO, "circular filter chain detected\n"); return 0; case AVLINK_UNINIT: link->init_state = AVLINK_STARTINIT; if ((ret = avfilter_config_links(link->src)) < 0) return ret; if (!(config_link = link->srcpad->config_props)) { if (link->src->nb_inputs != 1) { av_log(link->src, AV_LOG_ERROR, "Source filters and filters " "with more than one input " "must set config_props() " "callbacks on all outputs\n"); return AVERROR(EINVAL); } } else if ((ret = config_link(link)) < 0) { av_log(link->src, AV_LOG_ERROR, "Failed to configure output pad on %s\n", link->src->name); return ret; } switch (link->type) { case AVMEDIA_TYPE_VIDEO: if (!link->time_base.num && !link->time_base.den) link->time_base = inlink ? inlink->time_base : AV_TIME_BASE_Q; if (!link->sample_aspect_ratio.num && !link->sample_aspect_ratio.den) link->sample_aspect_ratio = inlink ? inlink->sample_aspect_ratio : (AVRational){1,1}; if (inlink && !link->frame_rate.num && !link->frame_rate.den) link->frame_rate = inlink->frame_rate; if (inlink) { if (!link->w) link->w = inlink->w; if (!link->h) link->h = inlink->h; } else if (!link->w || !link->h) { av_log(link->src, AV_LOG_ERROR, "Video source filters must set their output link's " "width and height\n"); return AVERROR(EINVAL); } break; case AVMEDIA_TYPE_AUDIO: if (inlink) { if (!link->time_base.num && !link->time_base.den) link->time_base = inlink->time_base; } if (!link->time_base.num && !link->time_base.den) link->time_base = (AVRational) {1, link->sample_rate}; } if ((config_link = link->dstpad->config_props)) if ((ret = config_link(link)) < 0) { av_log(link->dst, AV_LOG_ERROR, "Failed to configure input pad on %s\n", link->dst->name); return ret; } link->init_state = AVLINK_INIT; } } return 0; }
int avfilter_config_links(AVFilterContext *filter) { int (*config_link)(AVFilterLink *); unsigned i; int ret; for (i = 0; i < filter->nb_inputs; i ++) { AVFilterLink *link = filter->inputs[i]; if (!link) continue; switch (link->init_state) { case AVLINK_INIT: continue; case AVLINK_STARTINIT: av_log(filter, AV_LOG_INFO, "circular filter chain detected\n"); return 0; case AVLINK_UNINIT: link->init_state = AVLINK_STARTINIT; if ((ret = avfilter_config_links(link->src)) < 0) return ret; if (!(config_link = link->srcpad->config_props)) { if (link->src->nb_inputs != 1) { av_log(link->src, AV_LOG_ERROR, "Source filters and filters " "with more than one input " "must set config_props() " "callbacks on all outputs\n"); return AVERROR(EINVAL); } } else if ((ret = config_link(link)) < 0) { av_log(link->src, AV_LOG_ERROR, "Failed to configure output pad on %s\n", link->src->name); return ret; } if (link->time_base.num == 0 && link->time_base.den == 0) link->time_base = link->src && link->src->nb_inputs ? link->src->inputs[0]->time_base : AV_TIME_BASE_Q; if (link->type == AVMEDIA_TYPE_VIDEO) { if (!link->sample_aspect_ratio.num && !link->sample_aspect_ratio.den) link->sample_aspect_ratio = link->src->nb_inputs ? link->src->inputs[0]->sample_aspect_ratio : (AVRational){1,1}; if (link->src->nb_inputs) { if (!link->w) link->w = link->src->inputs[0]->w; if (!link->h) link->h = link->src->inputs[0]->h; } else if (!link->w || !link->h) { av_log(link->src, AV_LOG_ERROR, "Video source filters must set their output link's " "width and height\n"); return AVERROR(EINVAL); } } if ((config_link = link->dstpad->config_props)) if ((ret = config_link(link)) < 0) { av_log(link->src, AV_LOG_ERROR, "Failed to configure input pad on %s\n", link->dst->name); return ret; } link->init_state = AVLINK_INIT; } } return 0; }
int avfilter_config_links(AVFilterContext *filter) { int (*config_link)(AVFilterLink *); unsigned i; int ret; for (i = 0; i < filter->nb_inputs; i ++) { AVFilterLink *link = filter->inputs[i]; if (!link) continue; if (!link->src || !link->dst) { av_log(filter, AV_LOG_ERROR, "Not all input and output are properly linked (%d).\n", i); return AVERROR(EINVAL); } switch (link->init_state) { case AVLINK_INIT: continue; case AVLINK_STARTINIT: av_log(filter, AV_LOG_INFO, "circular filter chain detected\n"); return 0; case AVLINK_UNINIT: link->init_state = AVLINK_STARTINIT; if ((ret = avfilter_config_links(link->src)) < 0) return ret; if (!(config_link = link->srcpad->config_props)) { if (link->src->nb_inputs != 1) { av_log(link->src, AV_LOG_ERROR, "Source filters and filters " "with more than one input " "must set config_props() " "callbacks on all outputs\n"); return AVERROR(EINVAL); } } else if ((ret = config_link(link)) < 0) { av_log(link->src, AV_LOG_ERROR, "Failed to configure output pad on %s\n", link->src->name); return ret; } if (link->time_base.num == 0 && link->time_base.den == 0) link->time_base = link->src->nb_inputs ? link->src->inputs[0]->time_base : AV_TIME_BASE_Q; if (link->type == AVMEDIA_TYPE_VIDEO) { if (!link->sample_aspect_ratio.num && !link->sample_aspect_ratio.den) link->sample_aspect_ratio = link->src->nb_inputs ? link->src->inputs[0]->sample_aspect_ratio : (AVRational){1,1}; if (link->src->nb_inputs) { if (!link->frame_rate.num && !link->frame_rate.den) link->frame_rate = link->src->inputs[0]->frame_rate; if (!link->w) link->w = link->src->inputs[0]->w; if (!link->h) link->h = link->src->inputs[0]->h; } else if (!link->w || !link->h) { av_log(link->src, AV_LOG_ERROR, "Video source filters must set their output link's " "width and height\n"); return AVERROR(EINVAL); } } if (link->src->nb_inputs && link->src->inputs[0]->hw_frames_ctx && !(link->src->filter->flags_internal & FF_FILTER_FLAG_HWFRAME_AWARE)) { av_assert0(!link->hw_frames_ctx && "should not be set by non-hwframe-aware filter"); link->hw_frames_ctx = av_buffer_ref(link->src->inputs[0]->hw_frames_ctx); if (!link->hw_frames_ctx) return AVERROR(ENOMEM); } if ((config_link = link->dstpad->config_props)) if ((ret = config_link(link)) < 0) { av_log(link->dst, AV_LOG_ERROR, "Failed to configure input pad on %s\n", link->dst->name); return ret; } link->init_state = AVLINK_INIT; } } return 0; }
PUBLIC int application_layer_init(uint16_t num_host) { int option =0, tam_window =0, ret_send=0, ret_recived=0, tam_buffer=0; uint16_t ips =0, dest=0, dest_ips=0, ret_connect =0, sp; char file_name[50]; int l, c, d, mtu; uint16_t remote_host; //entra num loop at� o usuário solicitar o termino do programa while(option != 14) { LOG("BEM VINDO A CAMADA DE APLICACAO \n1 - Abrir ponto de servico(<void>)\n2 - Fechar ponto de servico(<IPS>)\n3 - conectar(<No de Destino>,<IPS>,<tamanho da janela>)\n4 - Fechar conexão do ponto de servico(<IPS>)\n5 - enviar(<IPS>)\n6 - receber(<IPS>)\n7 - baixar(<IPS>, <nome_arquivo>)\n8 - enviar arquivo(<IPS>)\n9 - Exibe tabela de rotas\n10 - Configurar o adulterador\n11 - Desabilitar enlace\n12 - Habilitar enlace\n13 - Depurar\n14 - Sair da camada de aplicacao\n Informe o numero do que deseja executar: "); scanf("%d",&option); __fpurge(stdin); switch(option) { case 1: //responsavel por abertura do ponto de servico LOG("Solicitacao de ponto de servico realizada!"); ips = alloc_service_point(); LOG ("Numero do ponto de servico: %u\n", ips); break; case 2: //responsavel por fechamento do ponto de servico LOG("Informe o ips:"); scanf("%hd",&sp); __fpurge(stdin); dalloc_service_point(sp); LOG ("Ponto de servico %u fechado com sucesso!\n", sp); break; case 3: //responsavel por conectar LOG("Solicitacao para conectar!"); LOG("Informe o ips origem:"); scanf("%hd",&sp); __fpurge(stdin); LOG("Informe o destino (no):"); scanf("%hd",&dest); __fpurge(stdin); LOG("Informe o destino (ips):"); scanf("%hd",&dest_ips); __fpurge(stdin); LOG("Informe o tamanho da janela:"); scanf("%d",&tam_window); __fpurge(stdin); ret_connect = connect_point(sp, dest, dest_ips,tam_window); LOG ("Retorno do conectar = %d\n", ret_connect); break; case 4: //responsavel por fechamento de conexão LOG("Informe o ips:"); scanf("%hd",&sp); __fpurge(stdin); close_conn(sp); LOG ("Ponto de servico %u desconectado com sucesso!\n", sp); break; case 5: //responsavel por funcao de enviar LOG("Solicitacao para enviar!"); LOG("Informe o ips:"); scanf("%hd",&sp); __fpurge(stdin); LOG("Informe o tamanho (bytes) da mensagem que deseja enviar:"); scanf("%d",&tam_buffer); __fpurge(stdin); char *str = (char*) malloc(tam_buffer * sizeof(char)); LOG("Infome a msg que deseja enviar:"); scanf("%[^\n]",str); __fpurge(stdin); LOG ("MSG recebida: %s\n", str); ret_send = send_point(sp, str, (tam_buffer * sizeof(char))); LOG ("Tamanho da msg: %u",(tam_buffer * sizeof(char))); LOG ("Quantidade de bytes enviados = %d\n", ret_send); tam_buffer =0; free(str); break; case 6: //responsavel por funcao de receber LOG("Solicitacao para receber!"); LOG("Informe o ips:"); scanf("%hd",&sp); __fpurge(stdin); LOG("Informe o tamanho (bytes) da mensagem que deseja receber:"); scanf("%d",&tam_buffer); __fpurge(stdin); char *str2 = (char*) malloc(tam_buffer * sizeof(char)); ret_recived = recv_point(sp, str2, (tam_buffer * sizeof(char))); LOG ("Quantidade de bytes recebidos = %d", ret_recived); LOG ("MSG recebida: %s\n", str2); tam_buffer =0; free(str2); break; case 7: //responsavel por fazer o download de um arquivo LOG("Informe o ips:"); scanf("%hd",&sp); __fpurge(stdin); LOG("Infome o nome do arquivo que deseja baixar:"); scanf("%[^\n]",file_name); __fpurge(stdin); download(sp, file_name); break; case 8: //responsavel por fazer o upload de um arquivo LOG("Informe o ips:"); scanf("%hd",&sp); __fpurge(stdin); upload(sp); break; case 9: /* Exibe a tabela de rotas*/ dislpay_routes(); break; case 10: //configura o adulterador //conf_adulterador(Perda, Corrupção, Duplicação), ca(...) LOG("Configuracao do adulterador:"); printf("Informe a porcentagem de perda:"); scanf("%d",&l); __fpurge(stdin); printf("Informe a porcentagem de corrupcao:"); scanf("%d",&c); __fpurge(stdin); printf("Informe a porcentagem de duplicacao:"); scanf("%d",&d); __fpurge(stdin); config_garbler(l, c, d); break; case 11: //desabilita um enlace //desabilitar_enlace(NóRem), de(...) printf("Informe o no remoto para desabilitar:"); scanf("%hu", &remote_host); __fpurge(stdin); disable_route(remote_host); config_link(num_host, remote_host, -1); break; case 12: //habilita um enlace //habilitar_enlace(NóRem), he(...) printf("Informe o no remoto para habilitar:"); scanf("%hu", &remote_host); __fpurge(stdin); printf("Informe mtu para habilitar:"); scanf("%d",&mtu); __fpurge(stdin); enable_route(remote_host); config_link(num_host, remote_host, mtu); break; case 13: //depurar //depurar, dp depurar(); break; case 14: //Fecha a camada de Aplicação LOG("Camada de APLICACAO terminou com sucesso.\n"); break; default: LOG("Opcao invalida! Escolha Novamente.\n"); break; } } return OK; }