Addon BFW Cache 1.0 - Acompanhamento - Parte 4  TOPIC_SOLVED

Reports of the use of official add-ons for BFW Project.!

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor Rafael Marotto » Dom Mar 18, 2012 10:56 pm

Boa noite a todos , instalei o bfw cache , porem acredito eu que nao estejam caheando os arquivos devido ao relatorio mostrar tudo como zero .
O meu squid esta habilitado , e o mysql tambem.
O que pode esta errado ?

File: 
Brazilfw 3.0.256
2 Link Adsl Velox 1mpbs cada
Load Balance
Smart Route com regras dividindo a banda
Squid ativado
Mysql ativado
Qos Ativado
Rafael Marotto
 

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor adrianollima » Seg Mar 19, 2012 12:17 am

adrianollima escreveu:O meu relatório zerou
Quando diz que o relatório zerou você quer dizer que o cache foi excluído ou você não vê nada no cache? De qualquer forma verifique o funcionamento do mysql, pois o relatório é mostrado pelos dados que estão no banco de dados.

Um abraço.[/quote]

Bruno, já tinha verificado o mysql antes de postar aqui o meu problema, no relatório aparece tudo zerado, mas me parece q o addon está funcionando, só q não consta no relatório o q tem e a economia, já rebootei o sistema várias vezes e verifiquei tudo, mas como estou aqui com o erro no youtube, faço um teste no site e se quebrar algum vídeo tá funcionando rsrsr. isso aconteceu do nada, não faço alterações na máquina em trabalho, toda alteração q faço eu testo primeiro em bancada e depois aplico, isso aconteceu a uns 4 dias. to pensando em formatar, mas se tiver funcionando eu vou perder o cache q já estava em 120 GB.
Avatar do usuário
adrianollima
BFW Novice
 
Mensagens: 98
Registrado em: Dom Fev 12, 2012 5:41 pm
BrazilFW Box:

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor Rafael Marotto » Qua Mar 21, 2012 9:34 pm

adrianollima escreveu:
adrianollima escreveu:O meu relatório zerou
Quando diz que o relatório zerou você quer dizer que o cache foi excluído ou você não vê nada no cache? De qualquer forma verifique o funcionamento do mysql, pois o relatório é mostrado pelos dados que estão no banco de dados.

Um abraço.


Bruno, já tinha verificado o mysql antes de postar aqui o meu problema, no relatório aparece tudo zerado, mas me parece q o addon está funcionando, só q não consta no relatório o q tem e a economia, já rebootei o sistema várias vezes e verifiquei tudo, mas como estou aqui com o erro no youtube, faço um teste no site e se quebrar algum vídeo tá funcionando rsrsr. isso aconteceu do nada, não faço alterações na máquina em trabalho, toda alteração q faço eu testo primeiro em bancada e depois aplico, isso aconteceu a uns 4 dias. to pensando em formatar, mas se tiver funcionando eu vou perder o cache q já estava em 120 GB.[/quote]
O que acontece e o seguinte no relatorio aparece zero nao apararece nenhuma informação nada x nada, e o que acontece tambem eu baixo um arquivo o internet 9 por exemplo , logo depois se eu baixar baixar ele novamente ele baixa na velocidade normal da internet ou a velocidade setada no qos , mesmo desabilitando o qos nao baixa rapido do cache
Rafael Marotto
 

Re: Addon BFW Cache - Acompanhamento - Parte 4 youtube cache

Mensagempor gerardonoh » Qua Mar 21, 2012 11:49 pm

brunovescovi escreveu:Boa noite, pessoal.

Este tópico é a continuação desde: http://www.brazilfw.com.br/forum/viewtopic.php?f=77&t=81695

Deixo em destaque o assunto dos últimos posts do tópico antigo. Por favor, leiam a patir do post abaixo até no final antes de iniciar a participação aqui:
http://www.brazilfw.com.br/forum/viewtopic.php?f=77&t=81695&p=282649#p282603

Continuem postando os resultados aqui para melhorarmos sempre. :o!

Um abraço.


Disculpen si estoy errado , no busque la forma de enviar la consulta en el foro, donde podemos bajar lo source code de bfwcache ya que sin el estamos a icegas checando plugins, el del yotube hice agragando lo siguiente al plugin para que guader los videos fragmentados y su lo hace pero no se si realmente se correcto la modificacion :
el la siguiente parte:
if (valor.at(0) == "id" || valor.at(0) == "video_id") {
retorna = valor.at(1);

// break; aqui cancel el brak para que revice si esta con range=1123-2342
}
//parche
if (valor.at(0) == "range"){
retorna2 = valor.at(1);
retorna += retorna2; // aqui le sumo el rango para que genere el noombre de asrchivo
break;

si funciona viendo los logs y el directory de cache genera el nombre con el id-range.flv

Espero puedan publica el codigo o rehacer el plugin de youtube

o si hay alguien mas que los pueda dar , ya que asi seremos mas los que ayudemos

no digo que se la solucion pero con eso le puedo decir que si tiene rage no lo cachee o le sume el rango al archivo para que no haga hit incorrecto cuando esta fracmentado el video ya que cuando es completo queda asi 12345678980.flv y cuando esta fracmentado 1234567890+valordel range.flv basandome en el ejemplo de parche quedaria asi 123456789801123-2342.flv

Gracias
Avatar do usuário
gerardonoh
BFW Beneméritos
 
Mensagens: 162
Registrado em: Qui Set 22, 2011 2:35 am
BrazilFW Box: P4 D-core 4gb
500 gb Hd
brazilfw : 3.0.261 64 Bits
dansguardian, X-YouTube-Edu-Filter
Implementado: Univesidad para 250-300 usuarios
3 adsl-Load Balancing

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor brunovescovi » Qui Mar 22, 2012 12:43 am

Boa noite, pessoal.

gerardonoh escreveu:Espero puedan publica el codigo o rehacer el plugin de youtube
O source do plugin do youtube é esse:
Código: Selecionar todos
#include <iostream>
#include <cstring>
#include <vector>
#include "../utils.cpp"

using namespace std;

// use this line to compile
// g++ -I. -fPIC -shared -g -o plugin.so plugin.cpp

string get_videoid(string url){
   vector<string> resultado,valor;
   string retorna = "";
   SearchReplace(url,"?","&");
   stringexplode(url, "/", &resultado);
   if (resultado.size() > 1){
       url = resultado.at(1);
       resultado.clear();
       stringexplode(url, "&", &resultado);
       for (int i=0; i <= resultado.size()-1;i++){
          valor.clear();
          stringexplode(resultado.at(i), "=", &valor);
          if (valor.at(0) == "id" || valor.at(0) == "video_id") {
             retorna  = valor.at(1);
             break;
          }

       }
    }   
   return retorna;
      
}
// o regex retorna a parte do texto encontrada na linha
//regex_match(regex,texto);

extern "C" resposta getmatch(const string url) {
    resposta r;

   r.file = get_videoid(url);
   if (   !r.file.empty() and
      ((url.find(".googlevideo.com") != string::npos) or (url.find(".youtube.com") != string::npos) or
       (regex_match("74\\.125\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)", url) != "")) and
      (url.find("videoplayback") != string::npos) and
      (url.find("begin=") == string::npos)
   ) {
      r.match = true;
      r.domain = "youtube";
      r.file += ".flv";
   } else {
      r.match = false;
   }
   return r;
}


O source completo do bfwcache será disponibilizado logo que sair a próxima versão. A próxima versão já está em testes pela equipe de Beta Testers e assim que aprovada será lançada. :o!

Um abraço.
Contribua para que o Projeto BFW permaneça no ar, Doe Click aqui
Contribua com o Bruno Vescovi, Doe Click aqui (pagseguro) ou Click aqui (paypal)
------------------------------------------------------------------------------------------------------------------------------
"Amor não é um sentimento. Amor é uma decisão de fazer o melhor possível para Deus e para o seu próximo."
Avatar do usuário
brunovescovi
BFW Moderator
BFW Add-on Developer
BFW Beneméritos
BFW Manager
BFW Documenter
BFW Expert
 
Mensagens: 3650
Registrado em: Ter Jun 29, 2010 7:27 pm
Localização: Guarapari - ES
BrazilFW Box: Não usando o BFW no momento

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor apoliano » Qui Mar 22, 2012 12:27 pm

brunovescovi escreveu:O source completo do bfwcache será disponibilizado logo que sair a próxima versão. A próxima versão já está em testes pela equipe de Beta Testers e assim que aprovada será lançada. :o!

Estou ancioso para testar a nova versão do BFW cache, tem muita novidade chegando ai.
Apoliano Sousa "técnico em Informática" aprendendo linux...
A cada dia meu conhecimento aumenta um pouco mais.
Avatar do usuário
apoliano
BFW Experienced
 
Mensagens: 798
Registrado em: Ter Dez 13, 2011 4:40 pm
Localização: Ubajara-CE
BrazilFW Box: Intel(R) Celeron(R) CPU 420 @ (1x) 1.608 GHz
946.96 MB DDR2 HD 80 Gb SATA
BFW 3.0.260 32 bits - squid - mac x ip - Mysql - phpmyadmin

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor yoboss » Qui Mar 22, 2012 8:20 pm

Hola a todos estoy intentando entender el funcionamiento del cache de vides de youtube analizando, y leyendo un poco, primero eh de entender que los programas que acompañan a Squid, llamados url rewriters sea el caso Videocache o thundercache,
Para nuestro caso el rewriter es thundercache.
:Primera Duda, donde es que esta la linea que indica donde se localiza el rewriter? se que tiene que haber una linea que indique el rewriter pero no la localizo.

Para que funcione un Url rewriter se necesita de unas listas de ACL que son las que le indican a SQUID que direcciones web pasan por el rewriter y que direcciones web no pasan por el rewriter.
en nuestro caso, el ACL de youtube es:

http.*\.youtube\.com.*videoplayback
Ejemplo:
Para mi caso

Referer: http://www.youtube.com/watch?v=EJz1YMAu_x0

GET /videoplayback?sparams=cp%2Cid%2Cip%2Cipbits%2Citag%2Cratebypass%2Csource%2Cexpire&fexp=909521%2C919701%2C913101%2C913603%2C914102&itag=43&ip=190.0.0.0&
signature=08764FFB01EE786AB056438312B6261BE5EF039E.935BC35E6B3092B0B0389A206FDE3DE5AE268630&sver=3&ratebypass=yes&source=youtube&
expire=1332471610&key=yt1&ipbits=8&cp=U0hSR1RST19GSkNOMl9MTFNHOjFuWWdvOGFtQzVX&id=109cf560c02eff1d HTTP/1.1
Host: o-o.preferred.tiws-mia1.v4.lscache6.c.youtube.com

este formato no lo entiendo así que lo transformo en lenguaje mas entendible:

GET /videoplayback?sparams=cp,id,ip,ipbits,itag,ratebypass,source,expire&fexp=909521,919701,913101,913603,914102&itag=43&ip=190.0.0.0&
signature=08764FFB01EE786AB056438312B6261BE5EF039E.935BC35E6B3092B0B0389A206FDE3DE5AE268630&sver=3&ratebypass=yes&source=youtube&
expire=1332471610&key=yt1&ipbits=8&cp=U0hSR1RST19GSkNOMl9MTFNHOjFuWWdvOGFtQzVX&id=109cf560c02eff1d HTTP/1.1
Host: o-o.preferred.tiws-mia1.v4.lscache6.c.youtube.com

El codigo del plugin indica que:

r.file = get_videoid(url);
explicacion de esta funcion va ir en busca del Id, el core de thunder se deve de encargar de procesar este id y almacenarlo en db, ya que si buscamos en la db localizaremos el id en el caso de mi video: id=109cf560c02eff1d

El id del vídeo se convertirá en el nombre del archivo almacenado en el cache, ya mas adelante le agrega una extension FLV para almacenar en el cache.

Entonces para mis pruevas en particular no encuentro error en el plugin!!!!
Dicen que ahora youtube corta los videos en pedazos, y la logica de los pedazos, entonces:

si para cada Id de video tenemosalgo como:
id=109cf560c02eff1d Pedazo 1
id=109cf560c02eff1d Pedazo 2
id=109cf560c02eff1d Pedazo 3

solo almacenamos estos en archivos separados.
Código: Selecionar todos
if (valor.at(0) == "id" || valor.at(0) == "video_id") {
retorna = valor.at(1);

// break; aqui cancel el brak para que revice si esta con range=1123-2342
}
//parche
if (valor.at(0) == "range"){
retorna2 = valor.at(1);
retorna += retorna2; // aqui le sumo el rango para que genere el noombre de asrchivo
break;


segun el amigo gerardonoh esto deveria corregir el problema.

Nota: Nunca eh programado un plugin de thunder pero eso si soy buen programador y tengo mi server con brazil fw y tambien quiero participar en la solucion.
dl problema de youtube que tambien es mi problema la pregunta es ¿donde hay que anotarse para programar ?????

>| >| Duda: si ya sabemos que los videos que dan problemas de cache vienen con range, porque no evitamos hacer cache de ellos mientras encontramos una solucion adecuada para ellos y seguimos funcionando OK con los que no tienen range.??

>| >| Duda o la logica de range es al azar? y a veces se parte y a veces no, en este caso seriamente estoy perdido se me ocurre en este caso, desarmar todos los archivos sea que vengan completos o en pedacitos, para mantener una logica razonable, los pedacitos vienen en tamaño fijo?? quien esta trabajando en la solucion donde puedo obtener un poco mas de datos?
yoboss
 

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor gerardonoh » Sex Mar 23, 2012 8:18 pm

esto hace como url_rewrite_program de bfwcache que realmente es un parent proxy

## BFWCACHE ##
acl bfwcache_lst url_regex -i "/etc/brazilfw/custom/bfwcache.acl"
never_direct allow bfwcache_lst
cache deny bfwcache_lst
cache_peer 127.0.0.1 parent 8080 0 proxy-only no-digest
dead_peer_timeout 2 seconds
cache_peer_access 127.0.0.1 allow bfwcache_lst
cache_peer_access 127.0.0.1 deny all

y por lo de corregir el problema no lo afirmo si no que espero que funcione ya que no tengo el codigo completo de bfwcache por que falta el utils.cpp que alo mejor ya tiene correciones, esperemos aque alguien le este dando seguimiento al problema , al igual el los vodoes que dan problemas traen una cadena como esta key=yes si en el plugin pueden validarlo y evita cachearlo seria bueno como indicas mientras se le da solucion ya que con el url_rewrite_program storeurl.pl que indican en una parte del foro que fue publicado para darle solucion temporal al youtbe no funciona en brazilfw256 no logra subir el squid. en el ejemplo que das de la url del video este en particular se cachearia correctamente ya que no tiene el key=yes ni range=1234-6789.

Gracias :?: :arrow: :o!
Avatar do usuário
gerardonoh
BFW Beneméritos
 
Mensagens: 162
Registrado em: Qui Set 22, 2011 2:35 am
BrazilFW Box: P4 D-core 4gb
500 gb Hd
brazilfw : 3.0.261 64 Bits
dansguardian, X-YouTube-Edu-Filter
Implementado: Univesidad para 250-300 usuarios
3 adsl-Load Balancing

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor brunovescovi » Sex Mar 23, 2012 8:56 pm

Boa noite, pessoal.

gerardonoh escreveu:esto hace como url_rewrite_program de bfwcache que realmente es un parent proxy
No Squid 3.1.18 do BFW 3.0.256 a funcionalidade url_rewrite_program não é suportada.
O url_rewrite_program é suportado até o Squid 2.7, se não me falha a memória.
Estou esperando o Squid 3.x suportar o url_rewrite_program para trazer o projeto inComum do Luciano Pinheiro para o BFW. Seria mais uma opção de cache, inclusive podendo funcionar junto com o BFW Cache.
Estou estudando o código fonte do inComum para ver se consigo uma idéia que possa implementar no BFW Cache para resolver domínios que dividem o download em urls diferentes, como o youtube e outros sites de antivirus. Não pude ver muita coisa ainda, estou bem no começo e estou fazendo outros testes também. Claro que qualquer parte do código usada de outros autores ou colaboradores terá os créditos devidos.

O Luciano Pinheiro também tem artigos em seu blog falando sobre o assunto youtube e cache.

Se quiserem dar uma olhada para ver se achamos algo, fiquem à vontade.
Se tiverem mais idéias, podem deixar aqui que estou lendo tudo e verificando a possibilidade de cada.

Quanto ao utils.cpp, o arquivo que tenho já está um pouco alterado por mim, mas no tocante aos plugins está igual, então é só baixar o source do TC 3.1 original para ver o source do utils.cpp. O source do BFW Cache 1.1 só pode ser liberado após os testes porque ele está em constante alteração devido às correções apontadas em fase de testes.

Não vejo a hora de podermos todos conversar sobre as possíveis melhorias no source do BFW Cache. Conto com todos os que puderem ajudar com a programação em C/C++, Lua ou qualquer outra coisa que pudermos usar. :mrgreen:

Um abraço.
Contribua para que o Projeto BFW permaneça no ar, Doe Click aqui
Contribua com o Bruno Vescovi, Doe Click aqui (pagseguro) ou Click aqui (paypal)
------------------------------------------------------------------------------------------------------------------------------
"Amor não é um sentimento. Amor é uma decisão de fazer o melhor possível para Deus e para o seu próximo."
Avatar do usuário
brunovescovi
BFW Moderator
BFW Add-on Developer
BFW Beneméritos
BFW Manager
BFW Documenter
BFW Expert
 
Mensagens: 3650
Registrado em: Ter Jun 29, 2010 7:27 pm
Localização: Guarapari - ES
BrazilFW Box: Não usando o BFW no momento

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor gildope » Sex Mar 23, 2012 9:31 pm

Bruno, porque o BFW3 usa o SQUID3 , porque não usa o LUSCA-CACHE. Assim poderia usar o incomum + bfwcache. O lusca-cache suporta url_rewrite_program.
gildope
 

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor brunovescovi » Sex Mar 23, 2012 9:46 pm

Boa noite, pessoal.

gildope escreveu:porque o BFW3 usa o SQUID3
O que vem nativo é decisão estratégica do Woshman, que é o developer do BFW 3.x. Eu nunca cheguei a perguntar a ele pessoalmente, mas certamente ele conhece os prós e contras e no final decidiu pelo squid 3 ao invés do squid 2.7 ou lusca.
Mas eu não sei a fundo os pormenores sobre as diferenças práticas entre essas opções. Sei o que leio sobre o assunto e o pouco que uso em meu ambiente diário.

Se alguém que usa o lusca de forma "pesada" e quiser fazer uma lista de vantagens em cima do squid 3, tenho certeza que o Woshman vai agradecer e vai analisar com atenção. :o!

Um abraço.
Contribua para que o Projeto BFW permaneça no ar, Doe Click aqui
Contribua com o Bruno Vescovi, Doe Click aqui (pagseguro) ou Click aqui (paypal)
------------------------------------------------------------------------------------------------------------------------------
"Amor não é um sentimento. Amor é uma decisão de fazer o melhor possível para Deus e para o seu próximo."
Avatar do usuário
brunovescovi
BFW Moderator
BFW Add-on Developer
BFW Beneméritos
BFW Manager
BFW Documenter
BFW Expert
 
Mensagens: 3650
Registrado em: Ter Jun 29, 2010 7:27 pm
Localização: Guarapari - ES
BrazilFW Box: Não usando o BFW no momento

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor yoboss » Sáb Mar 24, 2012 12:51 am

gerardonoh escreveu:esto hace como url_rewrite_program de bfwcache que realmente es un parent proxy

## BFWCACHE ##
acl bfwcache_lst url_regex -i "/etc/brazilfw/custom/bfwcache.acl"
never_direct allow bfwcache_lst
cache deny bfwcache_lst
cache_peer 127.0.0.1 parent 8080 0 proxy-only no-digest
dead_peer_timeout 2 seconds
cache_peer_access 127.0.0.1 allow bfwcache_lst
cache_peer_access 127.0.0.1 deny all

y por lo de corregir el problema no lo afirmo si no que espero que funcione ya que no tengo el codigo completo de bfwcache por que falta el utils.cpp que alo mejor ya tiene correciones, esperemos aque alguien le este dando seguimiento al problema , al igual el los vodoes que dan problemas traen una cadena como esta key=yes si en el plugin pueden validarlo y evita cachearlo seria bueno como indicas mientras se le da solucion ya que con el url_rewrite_program storeurl.pl que indican en una parte del foro que fue publicado para darle solucion temporal al youtbe no funciona en brazilfw256 no logra subir el squid. en el ejemplo que das de la url del video este en particular se cachearia correctamente ya que no tiene el key=yes ni range=1234-6789.


1ero: Gracias :aplause: basado en esta explicacion, al instalar un BFW cache estoy instando un segundo SQUID dentro de Brazil FW?? y lo estoy usando como parent cache?? es correcta esta afirmacion??? :?: :arrow: :o!
2do: no logro encontrar videos con el problema descrito me puse a ver unos cuantos y todos me hizo cache bien, entonces Podrian postear videos de ejemplo con el problema del range y el yes yes ..range=1234-6789 para poder analizar y posiblemente encontrar una solucion, Nuevamente gracias.
#------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
:D :D :D :D Luego de mirar como 10 vídeos mas di con un vídeo con problemas.
http://www.youtube.com/watch?v=MjXU7I6aBpA

Según mi análisis el vídeo fue cargado de 2 fuentes, ( por favor si alguien mas podría hacer la prueba para confirmar que son solo 2 o mas de 2).
GET /videoplayback?itag=34&sparams=algorithm,burst,cp,factor,id,ip,ipbits,itag,source,expire&sver=3&range=13-1781759&ip=190.0.0.0&keepalive=yes&fexp=909327&ipbits=8&expire=1332587599&burst=40&signature=20B13CDA94DB9643B219F24EA287A3FC2F07E624.548E3B512392AA64758C746DFE70736ADF5313E7&source=youtube&algorithm=throttle-factor&cp=U0hSR1VTVV9OU0NOMl9NTVlGOmVRVloxbVZsN2pw&
id=3235d4ec8e9a0690&factor=1.25&key=yt1&cm2=1 HTTP/1.1

GET /videoplayback?sver=3&sparams=algorithm,burst,cp,factor,id,ip,ipbits,itag,source,expire&range=8908800-10690559&ip=190.0.0.0&keepalive=yes&algorithm=throttle-factor&signature=20B13CDA94DB9643B219F24EA287A3FC2F07E624.548E3B512392AA64758C746DFE70736ADF5313E7&itag=34&factor=1.25&burst=40&cp=U0hSR1VTVV9OU0NOMl9NTVlGOmVRVloxbVZsN2pw&expire=1332587599&source=youtube&ipbits=8&fexp=909327&
id=3235d4ec8e9a0690&key=yt1&cm2=0 HTTP/1.1

Alguien mas podria analizarlo Por fabor para poder saber si voy por buen camino y son solo 2 pedazos o mas y aun me falta hacer algo mas..
#--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Siguiente prueba: Firefox 10.0.2
video http://www.youtube.com/watch?v=MjXU7I6aBpA

resultado:
GET /videoplayback?sparams=algorithm,burst,cp,factor,id,ip,ipbits,itag,source,expire&fexp=909521,919701,913101,913603,914102&
algorithm=throttle-factor&itag=34&
ip=190.0.0.0&burst=40&sver=3&signature=AA7A6F9FE21E4C0BF8045C0207A9C95C01CCD3F6.B18AF9F7CE5EDC4AB9ECE0DF4853F65D4ADA3F14&
source=youtube&expire=1332591199&key=yt1&ipbits=8&factor=1.25&cp=U0hSR1VUT19OU0NOMl9NTlNCOjBuWWdvOWNtWDNG&
id=3235d4ec8e9a0690&cm2=1 HTTP/1.1
:?: :?: Que software usan para sus análisis de trafico :?: :?:
Conclusion: WTF!!!! es el mismo vídeo pero en un momento estaba partido, en otro momento esta completo!!!! y si va hacer cache correcto !!! >| >| >| >|
Solucion :D :D :D :D, Solo hacer cache de vídeos que no vengan con range :D :D :D, al final luego de varios intentos igual tendremos el cache con el video completo.

Ahora como hacer eso :?: :?: Ideas 1???
#--------------------------
Código: Selecionar todos
#include <iostream>
#include <cstring>
#include <vector>
#include "../utils.cpp"

using namespace std;

// use this line to compile
// g++ -I. -fPIC -shared -g -o plugin.so plugin.cpp

string get_videoid(string url){
   vector<string> resultado,valor;
   string retorna = "";
   SearchReplace(url,"?","&");
   stringexplode(url, "/", &resultado);
   if (resultado.size() > 1){
       url = resultado.at(1);
       resultado.clear();
       stringexplode(url, "&", &resultado);
       for (int i=0; i <= resultado.size()-1;i++){
          valor.clear();
          stringexplode(resultado.at(i), "=", &valor);

//parche
if (valor.at(0) == "range"){
//si el Url del video tiene range entonces dar un resultado en retorna que luego pueda convertirse en un cache miss
retorna = ""; // 0 = cache miss
break;

         
          }

       }
    }   
   return retorna;
     
}
// o regex retorna a parte do texto encontrada na linha
//regex_match(regex,texto);

extern "C" resposta getmatch(const string url) {
    resposta r;

   r.file = get_videoid(url);
   // al tener una condicion para analizar   !r.file.empty() , y nuestra funcion get_videoid retornar vacio al detectar range se hace cache miss y todo queda OK
if (   !r.file.empty() and
      ((url.find(".googlevideo.com") != string::npos) or (url.find(".youtube.com") != string::npos) or
       (regex_match("74\\.125\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)", url) != "")) and
      (url.find("videoplayback") != string::npos) and
      (url.find("begin=") == string::npos)
   ) {
      r.match = true;
      r.domain = "youtube";
      r.file += ".flv";
   } else {
      r.match = false;
   }
   return r;
}


:D :D :D :D :D :D :D :D :D :D :D :D Alquien lo puede compilar y comencemos a hacer pruebas < O.O > < O.O > < O.O > < O.O > < O.O > :o! :o! :o! :o! :o!
yoboss
 

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor brunovescovi » Sáb Mar 24, 2012 7:21 am

Bom dia, pessoal.

yoboss escreveu:Solo hacer cache de vídeos que no vengan con range
Não é o ideal, mas é uma boa solução até encontrarmos a definitiva.

yoboss escreveu:
Código: Selecionar todos
//parche
if (valor.at(0) == "range"){
//si el Url del video tiene range entonces dar un resultado en retorna que luego pueda convertirse en un cache miss
retorna = ""; // 0 = cache miss
break;
Vou fazer uma adaptação segundo a sua sugestão, mas desse jeito o valor de "resposta" sempre será vazio, uma vez que você retirou essa parte:
brunovescovi escreveu:
Código: Selecionar todos
if (valor.at(0) == "id" || valor.at(0) == "video_id") {
retorna  = valor.at(1);
break;
Mas vou fazer a junção das duas funções (da original e da sua). Parabéns pela iniciativa e muito obrigado pela idéia. :aplause:

Agora não posso compilar nem testar, mas hoje ainda vou aplicar sua modificação e se der certo eu coloco esse plugin corrigido compilado aqui para que todos experimentem a correção imediatamente. :o!

Um abraço.
Contribua para que o Projeto BFW permaneça no ar, Doe Click aqui
Contribua com o Bruno Vescovi, Doe Click aqui (pagseguro) ou Click aqui (paypal)
------------------------------------------------------------------------------------------------------------------------------
"Amor não é um sentimento. Amor é uma decisão de fazer o melhor possível para Deus e para o seu próximo."
Avatar do usuário
brunovescovi
BFW Moderator
BFW Add-on Developer
BFW Beneméritos
BFW Manager
BFW Documenter
BFW Expert
 
Mensagens: 3650
Registrado em: Ter Jun 29, 2010 7:27 pm
Localização: Guarapari - ES
BrazilFW Box: Não usando o BFW no momento

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor yoboss » Sáb Mar 24, 2012 11:49 am

Correctooo, que burro que soy borre la parte importante >| >|

asi quedaria :
Código: Selecionar todos
#include <iostream>
#include <cstring>
#include <vector>
#include "../utils.cpp"

using namespace std;

// use this line to compile
// g++ -I. -fPIC -shared -g -o plugin.so plugin.cpp

string get_videoid(string url){
   vector<string> resultado,valor;
   string retorna = "";
   SearchReplace(url,"?","&");
   stringexplode(url, "/", &resultado);
   if (resultado.size() > 1){
       url = resultado.at(1);
       resultado.clear();
       stringexplode(url, "&", &resultado);
       for (int i=0; i <= resultado.size()-1;i++){
          valor.clear();
          stringexplode(resultado.at(i), "=", &valor);
         if (valor.at(0) == "range"){
         //si el Url del video tiene range entonces dar un resultado en retorna que luego pueda convertirse en un cache miss y romper el bucle
        retorna = ""; // 0 = cache miss
         break;
         }
        if (valor.at(0) == "id" || valor.at(0) == "video_id") {
             retorna  = valor.at(1);
             break;
          }
         
          }

       }
    }   
   return retorna;
     
}
// o regex retorna a parte do texto encontrada na linha
//regex_match(regex,texto);

extern "C" resposta getmatch(const string url) {
    resposta r;

   r.file = get_videoid(url);
   // al tener una condicion para analizar   !r.file.empty() , y nuestra funcion get_videoid retornar vacio al detectar range se hace cache miss y todo queda OK
if (   !r.file.empty() and
      ((url.find(".googlevideo.com") != string::npos) or (url.find(".youtube.com") != string::npos) or
       (regex_match("74\\.125\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)", url) != "")) and
      (url.find("videoplayback") != string::npos) and
      (url.find("begin=") == string::npos)
   ) {
      r.match = true;
      r.domain = "youtube";
      r.file += ".flv";
   } else {
      r.match = false;
   }
   return r;
}


Explicacion: Ambas partes del codigo
Código: Selecionar todos
  if (valor.at(0) == "range"){
         //si el Url del video tiene range entonces dar un resultado en retorna que luego pueda convertirse en un cache miss y romper el bucle
        retorna = ""; // 0 = cache miss
         break;
         }

y tambien
Código: Selecionar todos
 if (valor.at(0) == "id" || valor.at(0) == "video_id") {
             retorna  = valor.at(1);
             break;
          }

Rompen el bucle de análisis de parámetros, entonces alguien podría decir que probablemente primero se encuentre el VideoId y que se rompe el bucle sin siquiera saber que tenia range, mi logica es la siguiente:
si la lista de parámetros en mis 2 pruebas fue así

GET /videoplayback?itag=34&sparams=algorithm,burst,cp,factor,id,ip,ipbits,itag,source,expire&sver=3&range=13-1781759&ip=190.0.0.0&keepalive=yes&fexp=909327&ipbits=8&expire=1332587599&burst=40&signature=20B13CDA94DB9643B219F24EA287A3FC2F07E624.548E3B512392AA64758C746DFE70736ADF5313E7&source=youtube&algorithm=throttle-factor&cp=U0hSR1VTVV9OU0NOMl9NTVlGOmVRVloxbVZsN2pw&
id=3235d4ec8e9a0690&factor=1.25&key=yt1&cm2=1 HTTP/1.1

Noto claramente que los range llegan primero que el ID, y considero por suposición que todos los videos con range vienen en la misma forma.
entonces esa seria la correccion correcta :mrgreen:
:?: :?: como es que se compila un plugin :?: :?: donde esta la información?

Bruno podrias compilarlo para poder hacer los test lo mas pronto posible muchas gracias :o!
yoboss
 

Re: Addon BFW Cache - Acompanhamento - Parte 4- parche de pr

Mensagempor gerardonoh » Sáb Mar 24, 2012 8:14 pm

buenas tardes: aqui pongo un parche que estoy probando al igual seria abueno ver el codigo de util.cpp

Parche youtube , para cachear la mayoria de los videos, pero no hacen demasiado hit los que tiene range ya que es variable el parametro de range aunque sea el mismo video eso no se si por que soy solo una pc que lo est aprobando como digo seria buen testear y que avisen, al igual me confundi cuando puse key=yes , la que debe ser es keepalive=yes aqui el codigo :

File: youtube.com.cpp
#include <iostream>
#include <cstring>
#include <vector>
#include "../utils.cpp"

using namespace std;

// use this line to compile
// g++ -I. -fPIC -shared -g -o plugin.so plugin.cpp

string get_videoid(string url){
vector<string> resultado,valor;
string retorna = "";
string retorna2 = "";
SearchReplace(url,"?","&");
stringexplode(url, "/", &resultado);
if (resultado.size() > 1){
url = resultado.at(1);
resultado.clear();
stringexplode(url, "&", &resultado);
for (int i=0; i <= resultado.size()-1;i++){
valor.clear();

stringexplode(resultado.at(i), "=", &valor);

if (valor.at(0) == "cm2" || valor.at(0) == "id" || valor.at(0) == "video_id" || valor.at(0) == "range" || valor.at(0) == "fmt" || valor.at(0) == "itag" || valor.at(0) == "begin") {
retorna +=valor.at(1);

// break;
}
//**parche
//if (valor.at(0) == "range"){
//retorna2 = valor.at(1);
//retorna += retorna2;
//retorna="";
//break;

//}

}
}
return retorna;

}
// o regex retorna a parte do texto encontrada na linha
//regex_match(regex,texto);

extern "C" resposta getmatch(const string url) {
resposta r;

r.file = get_videoid(url);
if(url.find("noflv=") != string::npos && url.find("ptk=") == string::npos){
r.match = false;
}else{
if ( !r.file.empty() and
((url.find(".googlevideo.com") != string::npos) or (url.find(".youtube.com") != string::npos) or
(regex_match("74\\.125\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)", url) != "")) and
(url.find("videoplayback") != string::npos) and
(url.find("begin") == string::npos) ) {
r.match = true;
r.domain = "youtube";
r.file += ".flv";
} else {
r.match = false;
}
}
return r;
}
Editado pela última vez por brunovescovi em Seg Mar 26, 2012 9:29 am, em um total de 1 vez.
Razão: Adicionada a tag FILE para compactar a visualização da mensagem
Avatar do usuário
gerardonoh
BFW Beneméritos
 
Mensagens: 162
Registrado em: Qui Set 22, 2011 2:35 am
BrazilFW Box: P4 D-core 4gb
500 gb Hd
brazilfw : 3.0.261 64 Bits
dansguardian, X-YouTube-Edu-Filter
Implementado: Univesidad para 250-300 usuarios
3 adsl-Load Balancing

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor yoboss » Sáb Mar 24, 2012 11:54 pm

El problema es que el cache va subir mucho muy grande, podríamos tener 50 veces el mismo vídeo en cache, la solución de no hacer cache de los vídeos partidos me gusta mas.
Que opina la gente?
yoboss
 

Re: Addon BFW Cache - Acompanhamento - Parte 4 -source code

Mensagempor gerardonoh » Seg Mar 26, 2012 1:27 am

Seria bueno subir los archivos .cpp para que sirva de apoyo y hacer mas plugins

:o!
Avatar do usuário
gerardonoh
BFW Beneméritos
 
Mensagens: 162
Registrado em: Qui Set 22, 2011 2:35 am
BrazilFW Box: P4 D-core 4gb
500 gb Hd
brazilfw : 3.0.261 64 Bits
dansguardian, X-YouTube-Edu-Filter
Implementado: Univesidad para 250-300 usuarios
3 adsl-Load Balancing

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor brunovescovi » Seg Mar 26, 2012 10:04 am

Bom dia, pessoal.

Dei uma ajeitada no source do plugin do youtube de acordo com as sugestões aqui apresentadas para apontar MISS caso tenha range. Compilei e testei aqui em 64 bits.
Não sei se funcionou 100% como o esperado porque fiz poucos testes, mas percebi que ao ver alguns vídeos, a informação era acrescentada ao relatório, e às vezes não era acrescentada, ou seja, tudo indica que realmente tem vídeos que está fazendo cache e outros não, justamente como o esperado. :o!

Mas gostaria da ajuda dos senhores para testar essa alteração. O plugin compilado para 32 bits está no link abaixo:
http://www.brazilfw.com.br/users/brunovescovi/addons/3.0/bfwcache/youtube.com.so

Para substituir esse plugin, coloque-o dentro da pasta /lib/bfwcache e depois dê um restart no serviço (/etc/init.d/bfwcache restart).
É claro que dessa forma o novo plugin entra em funcionamento, mas após reiniciar o servidor o plugin antigo voltará. É melhor que fique asim pois estamos fazendo testes. Caso o plugin estiver estável, já incluo a alteração na próxima versão que já está em testes para que quando sair já venha com um plugin alterado.
Eu recomendo para quem puder que após trocar o plugin que dê um remake no cache para que os testes sejam melhor visualizados. Mas quem não puder, basta que verifique atentamente como estava o cache antes e fique acompanhando de perto para verificar se o plugin está operacional.

O source desse plugin alterado está abaixo:
File: youtube.com.cpp
#include <iostream>
#include <cstring>
#include <vector>
#include "../utils.cpp"

using namespace std;

string get_videoid(string url){
vector<string> resultado,valor;
string retorna = "";
SearchReplace(url,"?","&");
stringexplode(url, "/", &resultado);
if (resultado.size() > 1){
url = resultado.at(1);
resultado.clear();
stringexplode(url, "&", &resultado);
for (int i=0; i <= resultado.size()-1;i++){
valor.clear();
stringexplode(resultado.at(i), "=", &valor);
// si el Url del video tiene range entonces dar un resultado en retorna que luego pueda convertirse en un cache miss y romper el bucle
// Se a URL do vídeo possui range, então retorna um resultado que vai ser entendido como MISS e interrompe o loop
if (valor.at(0) == "range"){
retorna = ""; // 0 = cache miss
break;
}
if (valor.at(0) == "id" || valor.at(0) == "video_id") {
retorna = valor.at(1);
break;
}
}
}
return retorna;
}

extern "C" resposta getmatch(const string url) {
resposta r;

r.file = get_videoid(url);
// al tener una condicion para analizar !r.file.empty(), y nuestra funcion get_videoid retornar vacio al detectar range se hace cache miss y todo queda OK
// a checagem de r.file.empty() agora serve para apontar cache miss: (01) se não encontrar id e (02) se encontrar range.
if ( !r.file.empty() and
((url.find(".googlevideo.com") != string::npos) or (url.find(".youtube.com") != string::npos) or
(regex_match("74\\.125\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)", url) != "")) and
(url.find("videoplayback") != string::npos) and
(url.find("begin=") == string::npos)) {
r.match = true;
r.domain = "youtube";
r.file += ".flv";
} else {
r.match = false;
}
return r;
}



gerardonoh escreveu:buenas tardes: aqui pongo un parche que estoy probando al igual seria abueno ver el codigo de util.cpp

As funções utilizadas pelos plugins que estão dentro de utils.cpp estão abaixo:
Código: Selecionar todos
void SearchReplace(string &source, string search, string replace) {
    string::size_type position = source.find(search);

    while (position != string::npos) {
        source.replace(position, search.size(), replace);
        position = source.find(search);
    }
}


void stringexplode(string str, string separator, vector<string>* results) {
    size_t found;
    found = str.find_first_of(separator);
    while (found != string::npos) {
        if (found > 0) {
            results->push_back(str.substr(0, found));
        }
        str = str.substr(found + 1);
        found = str.find_first_of(separator);
    }
    if (str.length() > 0) {
        results->push_back(str);
    }
}


string regex_match(string er, string line) {
    int error;
    regmatch_t match;
    regex_t reg;
    if ((regcomp(&reg, er.c_str(), REG_EXTENDED | REG_NEWLINE)) == 0) {
        error = regexec(&reg, line.c_str(), 1, &match, 0);
        if (error == 0) {
            //cout << "Tamanho: " << line.size() << " Inicio: " << match.rm_so << " Fim: " << match.rm_eo << endl;
            return line.substr(match.rm_so, match.rm_eo - match.rm_so);
        } else {
            return "";
        }
    } else {
        return "";
    }
}



yoboss escreveu:El problema es que el cache va subir mucho muy grande, podríamos tener 50 veces el mismo vídeo en cache, la solución de no hacer cache de los vídeos partidos me gusta mas.
Que opina la gente?
Também concordo, mas as duas sugestões dadas até agora são medidas paleativas. A primeira é a versão compilada que coloquei aqui. A segunda vamos aguardar o autor analizar as funções aqui apresentadas do arquivo utils.cpp para que esteja mais sólida, então compilamos para testar também. De qualquer forma todas essas idéias e sugestões são fundamentais para chegarmos a uma solução final que seja satisfatória para todos. :o!


gerardonoh escreveu:Seria bueno subir los archivos .cpp para que sirva de apoyo y hacer mas plugins

Vou deixar aqui para modelo o plugin do 4shared. A grande maioria dos outros plugins usa essa mesma lógica:
File: 4shared.com.cpp
/* 
* (c) Copyright 2009 Joaquim Pedro França Simão (osmano807) <osmano807@gmail.com>. Some Rights Reserved.
* @autor Joaquim Pedro França Simão (osmano807) <osmano807@gmail.com>
*/

#include <iostream>
#include <cstring>
#include <string>
#include <vector>
#include "../utils.cpp"

using namespace std;

// use this line to compile
// g++ -I. -fPIC -shared -g -o 4shared.com.so 4shared.com.cpp

string get_filename(string url) {
vector<string> resultado;
if (url.find("?") != string::npos) {
stringexplode(url, "?", &resultado);
stringexplode(resultado.at(resultado.size()-2), "/", &resultado);
return resultado.at(resultado.size()-1);
} else {
stringexplode(url, "/", &resultado);
return resultado.at(resultado.size()-1);
}
}

extern "C" resposta getmatch(const string url) {
resposta r;

if ( (url.find(".4shared.com/download/") != string::npos)
) {

r.file = get_filename(url);
if (!r.file.empty()) {
r.match = true;
r.domain = "4shared";
} else {
r.match = false;
}
} else {
r.match = false;
}
return r;
}



Agradeço a participação de todos e gostaria que as sugestões continuassem para chegarmos a uma solução para todos.:o!

Muito obrigado. :aplause:
Um abraço a todos.
Contribua para que o Projeto BFW permaneça no ar, Doe Click aqui
Contribua com o Bruno Vescovi, Doe Click aqui (pagseguro) ou Click aqui (paypal)
------------------------------------------------------------------------------------------------------------------------------
"Amor não é um sentimento. Amor é uma decisão de fazer o melhor possível para Deus e para o seu próximo."
Avatar do usuário
brunovescovi
BFW Moderator
BFW Add-on Developer
BFW Beneméritos
BFW Manager
BFW Documenter
BFW Expert
 
Mensagens: 3650
Registrado em: Ter Jun 29, 2010 7:27 pm
Localização: Guarapari - ES
BrazilFW Box: Não usando o BFW no momento

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor adrianollima » Seg Mar 26, 2012 1:17 pm

olá ! Meus clientes estão reclamando de uma coisa que só percebi hoje, a imagem no facebook fica em má qualidade ou seja em baixa resolução, como não mexo muito não percebi, e hoje entrei só pra ver e realmente eles tem razão, alguém mais percebeu isso ? ou é só comigo ?
Avatar do usuário
adrianollima
BFW Novice
 
Mensagens: 98
Registrado em: Dom Fev 12, 2012 5:41 pm
BrazilFW Box:

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor yoboss » Seg Mar 26, 2012 1:53 pm

Hola de nuevo explicare el resultado de mi análisis:
Primero tomemos como ejemplo el mismo vídeo que me sirvió de análisis anteriormente.

http://www.youtube.com/watch?v=MjXU7I6aBpA
Primera pasada
GET /videoplayback?itag=34&sparams=algorithm,burst,cp,factor,id,ip,ipbits,itag,source,expire&sver=3&range=13-1781759&ip=190.0.0.0&keepalive=yes&fexp=909327&ipbits=8&expire=1332587599&burst=40&signature=20B13CDA94DB9643B219F24EA287A3FC2F07E624.548E3B512392AA64758C746DFE70736ADF5313E7&source=youtube&algorithm=throttle-factor&cp=U0hSR1VTVV9OU0NOMl9NTVlGOmVRVloxbVZsN2pw&
id=3235d4ec8e9a0690&factor=1.25&key=yt1&cm2=1 HTTP/1.1
Cache OK file cached todo OK

Segunda pasada
GET /videoplayback?itag=34&sparams=algorithm,burst,cp,factor,id,ip,ipbits,itag,source,expire&sver=3&range=13-1781759&ip=190.0.0.0&keepalive=yes&fexp=909327&ipbits=8&expire=1332587599&burst=40&signature=20B13CDA94DB9643B219F24EA287A3FC2F07E624.548E3B512392AA64758C746DFE70736ADF5313E7&source=youtube&algorithm=throttle-factor&cp=U0hSR1VTVV9OU0NOMl9NTVlGOmVRVloxbVZsN2pw&
id=3235d4ec8e9a0690&factor=1.25&key=yt1&cm2=1 HTTP/1.1
--------------------------------------->> +
GET /videoplayback?sver=3&sparams=algorithm,burst,cp,factor,id,ip,ipbits,itag,source,expire&range=8908800-10690559&ip=190.0.0.0&keepalive=yes&algorithm=throttle-factor&signature=20B13CDA94DB9643B219F24EA287A3FC2F07E624.548E3B512392AA64758C746DFE70736ADF5313E7&itag=34&factor=1.25&burst=40&cp=U0hSR1VTVV9OU0NOMl9NTVlGOmVRVloxbVZsN2pw&expire=1332587599&source=youtube&ipbits=8&fexp=909327&
id=3235d4ec8e9a0690&key=yt1&cm2=0 HTTP/1.1

Cache MISS!!!! ^/
Aunque la razón del cache miss no es tan obvia, la solución no la podremos lograr desde aquí desde los plugins y hay que retocar el core la función que se encarga de procesar los plugins tiene que recivir un arreglo de cada plugin, asi
Código: Selecionar todos
return r;


Solucion 1
r esta compuesto de:
r.file
r.match //boolean variable solo true o false
r.domain
//------>>>>>>>>>>>
Para el caso de Youtube es especifico es necesario que nuestra variable r.match nos pueda soportar un valor extra.
y asi tener
r.match = 0 //false
r.match = 1 //true
r.match = -1 = Posible
y luego modificar el core para ir en busca del file que haga posible un cache hit o definitivamente un cache miss.
El camino tomado por thunder cache 7 es masomenos por ahí por lo cual andan modificando su core una y otra vez. ("solo me lo imagino")

Solucion 2
1 Necesitamos solo almacenar los archivos que vengan sin range :D. eso si ya lo tenemos muy claro.
2 Pero necesitamos hacer hit así vengan con range cuando ya los tenemos en el cache.(esto aun no pasa con el primer parche)
3 un lugar fácil de donde sacar los id de los archivos que ya hicieron hit esta en la db ( entonces leer el id de la db para poder hacer hit a pesar de el range)
( hay que programar esto, bruno plz si pudieras postear parte del código en donde se acceda a la db seria de mucha utilidad).

4 hacer pruebas de nuevo.
:o!
yoboss
 

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor brunovescovi » Seg Mar 26, 2012 4:41 pm

Boa tarde, pessoal.

adrianollima escreveu:olá ! Meus clientes estão reclamando de uma coisa que só percebi hoje, a imagem no facebook fica em má qualidade ou seja em baixa resolução, como não mexo muito não percebi, e hoje entrei só pra ver e realmente eles tem razão, alguém mais percebeu isso ? ou é só comigo ?
O plugin do facebook não é nativo deste addon. O uso é por conta e risco de cada um. Não temos condições de tratar aqui sobre plugins que não estão na versão original.

Um abraço.
Contribua para que o Projeto BFW permaneça no ar, Doe Click aqui
Contribua com o Bruno Vescovi, Doe Click aqui (pagseguro) ou Click aqui (paypal)
------------------------------------------------------------------------------------------------------------------------------
"Amor não é um sentimento. Amor é uma decisão de fazer o melhor possível para Deus e para o seu próximo."
Avatar do usuário
brunovescovi
BFW Moderator
BFW Add-on Developer
BFW Beneméritos
BFW Manager
BFW Documenter
BFW Expert
 
Mensagens: 3650
Registrado em: Ter Jun 29, 2010 7:27 pm
Localização: Guarapari - ES
BrazilFW Box: Não usando o BFW no momento

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor brunovescovi » Seg Mar 26, 2012 5:02 pm

Boa tarde, pessoal.

yoboss escreveu: bruno plz si pudieras postear parte del código en donde se acceda a la db seria de mucha utilidad
O arquivo que chama os plugins é este abaixo:
File: connectiontohttp2.cpp
#include "connectiontohttp2.h"
#include "logfile.h"
#include "utils.h"
#include "params.h"
#include "database_mysql.h"
#include "x64compat.h"

#include <stdio.h>
#include <iostream>
#include <vector>
#include <dlfcn.h>
#include <cstdlib>
#include <sstream>


extern int LL; //LogLevel

void ConnectionToHTTP2::Cache() {
msghit = "MISS";
hit = downloading = r.match = rewrited = resuming = passouheader = general = etag = false;
filesize = filedownloaded = filesended = partial = expiration = 0;
if (LL > 0) LogFile::AccessMessage("Url %s%s\n", domain.c_str(), request.c_str());
string domaintmp = getdomain(domain + request);
string pluginpath = pluginsdir + domaintmp + ".so";

if (file_exists(pluginpath)) {
if (LL > 0) LogFile::AccessMessage("Loading plugin %s\n", pluginpath.c_str());
void* handle = dlopen(pluginpath.c_str(), RTLD_LAZY);
if (!handle) {
if (LL > 0) LogFile::ErrorMessage("Cannot open library: %s\n", dlerror());
}
typedef resposta(*plugin_t)(string);
plugin_t plugin = (plugin_t) dlsym(handle, "getmatch");
if (!plugin) {
if (LL > 0) LogFile::ErrorMessage("Cannot load symbol: %s\n", dlerror());
dlclose(handle);
} else { // Plugin carregado corretamente, ok para atribuir valores ao struc
r = plugin(domain + request);
if (LL > 0) LogFile::AccessMessage("Resposta Match %d Domain %s File %s\n", r.match, r.domain.c_str(), r.file.c_str());
}
}

if (r.match) {
subdir = ConvertChar(r.file);
completepath = cachedir + r.domain;
completefilepath = completepath + "/" + subdir + "/" + r.file;
if (LL > 1) LogFile::AccessMessage("Arquivo: %s\n", string(completefilepath).c_str());
if (r.domain == "rewrite") {
r.match = false;
rewrited = true;
if (LL > 1) LogFile::AccessMessage("Rewrite: %s%s \n", r.file.c_str());
} else if (!file_exists(completefilepath)) {
if (disk_use(completepath) <= cache_limit) {
// cria diretorios e etc
if (!file_exists(completepath + "/" + subdir + "/")) {
mkdir_p(completepath + "/" + subdir + "/");
}
domaindb.set("INSERT INTO bfwcache (domain, file, size, downloaded, requested, last_request) VALUES ('" + r.domain + "', '" + domaindb.sqlconv(r.file) + "', 0, now(),0,now());");
if (LL > 0) LogFile::AccessMessage("MISS: Domain: %s File: %s\n", r.domain.c_str(), r.file.c_str());
} else {
LogFile::ErrorMessage("Cache limit (%d/%d) %s%s\n", cache_limit, disk_use(completepath), cachedir.c_str(), r.domain.c_str());
}
} else if (file_exists(completefilepath)) {
if (domaindb.get("SELECT size FROM bfwcache WHERE file='" + domaindb.sqlconv(r.file) + "' and domain='" + r.domain + "';") != 0) {
LogFile::ErrorMessage("erro select mysql: %s\n", domaindb.getError().c_str());
r.match = hit = false;
}
filesize = atol(domaindb.get("size", 1).c_str());

if (LL > 1) LogFile::AccessMessage("Size db: "LLD" File size: "LLD" Timeout: %d\n", filesize, file_size(completefilepath), (now() - file_getmodif(completefilepath)));

if (domaindb.get_num_rows() == 0) // se nao existir o registro do arquivo do db
{
domaindb.set("INSERT INTO bfwcache (domain, file, size, downloaded, requested, last_request) VALUES ('" + r.domain + "', '" + domaindb.sqlconv(r.file) + "', 0, now(),0,now());");
if (LL > 0) LogFile::AccessMessage("MISS DB: Domain: %s File: %s\n", r.domain.c_str(), r.file.c_str());
} else if (
((now() - file_getmodif(completefilepath)) < 10)
&&
(
(filesize > file_size(completefilepath)) || (filesize == 0)
)
) {
if (Params::GetConfigBool(UpperCase(r.domain) + "_NODOWN")) {
if (LL > 1) LogFile::AccessMessage("Concorrencia cancelada: Domain: %s File: %s\n", r.domain.c_str(), r.file.c_str());
r.match = false; // pega direto do site
} else {
hit = true;
downloading = true;
if (LL > 0) LogFile::AccessMessage("HIT DOWN: Domain: %s File: %s\n", r.domain.c_str(), r.file.c_str());
msghit = "HIT";
}
} else if (filesize == file_size(completefilepath)) {
hit = true;
downloading = false;
domaindb.set("UPDATE bfwcache SET requested=requested+1, last_request=now() WHERE file='" + domaindb.sqlconv(r.file) + "' and domain='" + r.domain + "';");
if (LL > 0) LogFile::AccessMessage("HIT!: Domain: %s File: %s\n", r.domain.c_str(), r.file.c_str());
msghit = "HIT";
} else if (Params::GetConfigBool(UpperCase(r.domain) + "_NORESUME") && filesize > 0) { // o arquivo foi baixado parcialmente
if (disk_use(completepath) <= cache_limit) {
hit = resuming = downloading = true;
downloader.ClearVars();
downloader.SetDomainAndPort(domain, port);
if (LL > 0) LogFile::AccessMessage("HIT RESUME: Domain: %s File: %s\n", r.domain.c_str(), r.file.c_str());
msghit = "HIT";
} else {
LogFile::ErrorMessage("Cache limit (%d/%d) %s%s\n", cache_limit, disk_use(completepath), cachedir.c_str(), r.domain.c_str());
}
}
domaindb.clear();

}
}
}

bool ConnectionToHTTP2::SetDomainAndPort(string domainT, int portT, string requestT) {
//if (LL>1) LogFile::AccessMessage("Passando pelo SetDomainAndPort \n");
if (!domaindb.connected)
if (domaindb.open(Params::GetConfigString("MYSQL_HOST"), Params::GetConfigString("MYSQL_USER"), Params::GetConfigString("MYSQL_PASS"), Params::GetConfigString("MYSQL_DB")) != 0) {
LogFile::ErrorMessage("erro conexao mysql: %s\n", domaindb.getError().c_str());
Close();
}
domain = domainT;
request = requestT;
port = portT;
pluginsdir = Params::GetConfigString("PLUGINSDIR");
cachedir = Params::GetConfigString("CACHEDIR");
cache_limit = Params::GetConfigInt("CACHE_LIMIT");

Cache();

if (hit)
return true;
else
return ConnectionToHTTP::SetDomainAndPort(domain, port);
}

bool ConnectionToHTTP2::ConnectToServer() {
//if (LL>1) LogFile::AccessMessage("Passando pelo ConnectToServer \n");
if (rewrited) return true;
if (resuming) {
if (!downloader.ConnectToServer()) {
if (LL > 0) LogFile::AccessMessage("downloader nao conectou\n");
Close();
}
}
if (hit) return true;
else return ConnectionToHTTP::ConnectToServer();
}

bool ConnectionToHTTP2::SendHeader(string header, bool ConnectionClose, string requestT) {
//if (LL>1) LogFile::AccessMessage("Passando pelo SendHeader \n");
if (passouheader) {
if (cachefile.is_open()) cachefile.close();
if (outfile.is_open()) outfile.close();
if ((filesended < filesize) && ((r.match && !hit) || (r.match && resuming)))
file_setmodif(completefilepath, 1);
downloader.Close();

if (LL > 1) LogFile::AccessMessage("Novo header, chamando Cache()\n");
request = requestT;
Cache();
}
if (!passouheader) passouheader = true;
if (rewrited) return true;

if (resuming) {
vector<string> lines;
char linha[5000];
string headertmp = "";
stringexplode(header, "\r\n", &lines);
for (unsigned int i = 0; i <= lines.size() - 1; ++i) {
if (i == lines.size() - 1) {
sprintf(linha, "Range: bytes="LLD"-"LLD"\r\n", file_size(completefilepath), filesize);
} else {
sprintf(linha, "%s\r\n", lines.at(i).c_str());
}
headertmp.append(linha);
}
if (LL > 1) LogFile::AccessMessage("header req down (%s%s)\n %s \n", domain.c_str(), request.c_str(), headertmp.c_str());
downloader.SendHeader(headertmp, true);
}
if (hit && (header.find("If-None-Match") != string::npos)) etag = true;
if (hit) {
if (!downloading && !resuming) {
vector<string> lines;
stringexplode(header, "\r\n", &lines);
for (unsigned int i = 1; i <= lines.size() - 1; ++i) {
if (lines.at(i).find("Range: bytes=") == 0) {
//pegar o valor do range, trabalhando só com o inicio do arquivo
partial = atoi(lines.at(i).substr(13, lines.at(1).length() - 13 - lines.at(i).find("-")).c_str());
break;
}
}

}
return true;
} else return ConnectionToHTTP::SendHeader(header, ConnectionClose);
}

string ConnectionToHTTP2::GetIP() {
//if (LL>1) LogFile::AccessMessage("Passando pelo GetIP \n");
if (hit || rewrited) return "0.0.0.0";
else return ConnectionToHTTP::GetIP();
}

bool ConnectionToHTTP2::ReadHeader(string &headerT) {
//if (LL>1) LogFile::AccessMessage("Passando pelo ReadHeader \n");
if (resuming) {
string headertmp = "";
if (downloader.GetResponse() == 0) downloader.ReadHeader(headertmp);
downloader.AnalyseHeader(headertmp);
if (LL > 1) LogFile::AccessMessage("header downloader (%d)(%s%s)\n%s\n", downloader.GetResponse(), domain.c_str(), request.c_str(), headertmp.c_str());
if ((downloader.GetResponse() == 302) || (downloader.GetResponse() == 303)) {
if (LL > 0) LogFile::AccessMessage("redirect resume: %d\n", downloader.GetResponse());
headerT = headertmp;
hit = resuming = downloading = false;
rewrited = true;
return true;
} else if (downloader.GetResponse() != 206) {
if (LL > 0) LogFile::AccessMessage("resume fail: %d\n", downloader.GetResponse());
return false;
}
}

if (rewrited) {
stringstream tmp;
tmp.str("");

tmp << "HTTP/1.0 302 Moved\r\n";
tmp << "Location: http://" << r.file << "\r\n";
tmp << "Content-Length: 0\r\n";
tmp << "Connection: close\r\n\r\n";

headerT = tmp.str();
return true;
} else if (hit && etag) {
stringstream tmp;
tmp.str("");

tmp << "HTTP/1.0 304 Not Modified\r\n";
tmp << "Connection: close\r\n\r\n";

headerT = tmp.str();
rewrited = true;
r.match = hit = false;
return true;
} else if (hit) {
stringstream tmp;
tmp.str("");
if (partial == 0)
tmp << "HTTP/1.0 200 OK\r\n";
else
tmp << "HTTP/1.0 206 Partial\r\n";
//tmp << "Content-Disposition: attachment; filename=\"" + r.file + "\"\r\n";
if (getFileExtension(r.file) == "SWF")
tmp << "Content-Type: application/x-shockwave-flash\r\n";
else if (getFileExtension(r.file) == "FLV")
tmp << "Content-Type: video/x-flv\r\n";
else
tmp << "Content-Type: application/octet-stream\r\n";

tmp << "Content-Length: ";
tmp << filesize - partial;
tmp << "\r\n";
if (partial > 0) {
tmp << "Accept-Ranges: bytes\r\n";
tmp << "Content-Range: bytes " << partial << "-" << (filesize - 1) << "/" << filesize << "\r\n";
}
tmp << "X-Cache: HIT from BFW Cache\r\n";
tmp << "BFW Cache: HIT FROM " << r.domain << "\r\n";
headerT = tmp.str();
return true;

} else return ConnectionToHTTP::ReadHeader(headerT);

}

bool ConnectionToHTTP2::AnalyseHeader(string &linesT) {
//if (LL>1) LogFile::AccessMessage("Passando pelo AnalyseHeader \n");
if (hit) return true;
else return ConnectionToHTTP::AnalyseHeader(linesT);
}

bool ConnectionToHTTP2::IsItKeepAlive() {
//if (LL>1) LogFile::AccessMessage("Passando pelo IsItKeepAlive \n");
if (hit) return true;
else return ConnectionToHTTP::IsItKeepAlive();
}

int64_t ConnectionToHTTP2::GetContentLength() {
//if (LL>1) LogFile::AccessMessage("Passando pelo GetContentLength \n");
if (hit)
return filesize;
else {
int64_t ContentLengthReference;
ContentLengthReference = ConnectionToHTTP::GetContentLength();
if (r.match) {
if (ContentLengthReference > 0) {
if (general) {
domaindb.set("UPDATE bfwcache SET size=" + itoa(ContentLengthReference) + " WHERE file='" + domaindb.sqlconv(subdir + "/" + r.file) + "' and domain='" + r.domain + "';");
} else {
domaindb.set("UPDATE bfwcache SET size=" + itoa(ContentLengthReference) + " WHERE file='" + domaindb.sqlconv(r.file) + "' and domain='" + r.domain + "';");
}
}
filesize = ContentLengthReference;
if (((ContentLengthReference < Params::GetConfigInt(getFileExtension(getFileName(request)) + "_MIN") || (ContentLengthReference > Params::GetConfigInt(getFileExtension(getFileName(request)) + "_MAX") && Params::GetConfigInt(getFileExtension(getFileName(request)) + "_MAX") > 0)) && general) ||
(ContentLengthReference < Params::GetConfigInt(UpperCase(r.domain) + "_MIN") || (ContentLengthReference > Params::GetConfigInt(UpperCase(r.domain) + "_MAX") && Params::GetConfigInt(UpperCase(r.domain) + "_MAX") > 0))) {
r.match = general = false;
if (LL > 0) LogFile::AccessMessage("MAXMIN CANCEL: Domain: %s File: %s Size: "LLD"\n", r.domain.c_str(), r.file.c_str(), filesize);
}
}
return ContentLengthReference;
}
}

bool ConnectionToHTTP2::IsItChunked() {
//if (LL>1) LogFile::AccessMessage("Passando pelo IsItChunked \n");
if (hit) return false;
else return ConnectionToHTTP::IsItChunked();
}

string ConnectionToHTTP2::PrepareHeaderForBrowser() {
//if (LL>1) LogFile::AccessMessage("Passando pelo PrepareHeaderForBrowser \n");
if (hit) {
string header;
ReadHeader(header);
return header;
} else if (r.match) {
timerecord = time(NULL);
stringstream tmp;
tmp.str("");
tmp << ConnectionToHTTP::PrepareHeaderForBrowser();
tmp << "BFW Cache: MISS FROM " << r.domain << "\r\n";
return tmp.str();

} else return ConnectionToHTTP::PrepareHeaderForBrowser();
}

int ConnectionToHTTP2::GetResponse() {
//if (LL>1) LogFile::AccessMessage("Passando pelo GetResponse \n");
int retorno;
if (hit) retorno = 200;
else if (!hit && r.match) {
retorno = ConnectionToHTTP::GetResponse();
if (retorno != 200) {
r.match = hit = resuming = false;
}
} else retorno = ConnectionToHTTP::GetResponse();
return retorno;
}

bool ConnectionToHTTP2::CheckForData(int timeout) {
//if (LL>1) LogFile::AccessMessage("Passando pelo CheckForData \n");
if (hit) return false;
else return ConnectionToHTTP::CheckForData(timeout);
}

ssize_t ConnectionToHTTP2::ReadBodyPart(string &bodyT, bool Chunked) {
//if (LL>1) LogFile::AccessMessage("Passando pelo ReadBodyPart \n");
if (rewrited) {
bodyT.append("\r\n", 2);
return 2;
}
ssize_t BodyLength = 0;
if (resuming) {
string bodyTmp = "";
BodyLength = downloader.ReadBodyPart(bodyTmp, Chunked);
if (!outfile.is_open()) {
outfile.open(string(completefilepath).c_str(), ios::out | ios::app | ios::binary);
}
if (BodyLength > 0)
outfile.write(bodyTmp.c_str(), BodyLength);
if ((time(NULL) - timerecord2) > 1) {
if (LL > 1) LogFile::AccessMessage("resumindo... %d \n", BodyLength);
outfile.flush();
file_setmodif(completefilepath);
}
}
if (hit) {
BodyLength = 0;
int tbuffer = MAXRECV;
char memblock[MAXRECV];
memset(memblock, '\0', sizeof (memblock));
bodyT = "";
while (BodyLength == 0) {
if (!cachefile.is_open()) {
cachefile.open(string(completefilepath).c_str(), ios::in | ios::binary);

if (partial > 0) cachefile.seekg(partial);
timeout = timerecord = time(NULL);
}
if (downloading) {
if ((time(NULL) - timerecord) > 1) {
filedownloaded = file_size(completefilepath);
timerecord = time(NULL);
if (LL > 1) LogFile::AccessMessage("atualizando... %s tbuffer: %d downloaded: "LLD" filesize: "LLD" \n", r.file.c_str(), tbuffer, filedownloaded, filesize);
}
if ((filesended + MAXRECV) > filedownloaded) {
tbuffer = filedownloaded - filesended;
} else if (filedownloaded == filesize) {
downloading = false;
tbuffer = MAXRECV;
if (LL > 1) LogFile::AccessMessage("acabou o download, nao precisa ajustar tbuffer %s \n", r.file.c_str());
} else tbuffer = MAXRECV;
}
if (cachefile.eof()) {
if (LL > 0) LogFile::AccessMessage("EOF: %s\n", r.file.c_str());
BodyLength = 0;
cachefile.close();
break;
}
if (tbuffer > 0) {
cachefile.read(memblock, tbuffer);
BodyLength = cachefile.gcount();
if (BodyLength > 0) {
filesended += BodyLength;
bodyT.append(memblock, BodyLength);
timeout = time(NULL);
} else usleep(rand() % 300000);
} else usleep(rand() % 300000);
if ((time(NULL) - timeout) >= 5) {
if (LL > 0) LogFile::AccessMessage("TIMEOUT: %s\n", r.file.c_str());
BodyLength = -1;
cachefile.close();
break;
}
if (filesended == filesize) {
cachefile.close();
break;
}
}
return BodyLength;
} else {
ssize_t BodyLength;
BodyLength = ConnectionToHTTP::ReadBodyPart(bodyT, Chunked);
if (r.match) {
if (!cachefile.is_open()) {
cachefile.open(string(completefilepath).c_str(), ios::out | ios::binary);
}
if (BodyLength > 0) {
cachefile.write(bodyT.c_str(), BodyLength);
filesended += BodyLength;
if ((time(NULL) - timerecord) > 1) {
cachefile.flush();
file_setmodif(completefilepath);
timerecord = time(NULL);
}
}
}
return BodyLength;
}
}

void ConnectionToHTTP2::Close() {
//if (LL>1) LogFile::AccessMessage("Passando pelo Close\n");
domaindb.close();
if (cachefile.is_open()) cachefile.close();
if (outfile.is_open()) outfile.close();
if ((filesended < filesize) && ((r.match && !hit) || (r.match && resuming)))
file_setmodif(completefilepath, 1);

downloader.Close();
ConnectionToHTTP::Close();
}



Esse arquivo utiliza outras funções do utils.cpp, estão abaixo:
Código: Selecionar todos
string UpperCase(string CaseString) {
    string::const_iterator si = CaseString.begin();
    string::size_type j = 0;
    string::size_type e = CaseString.size();
    while (j < e) {
        CaseString[j++] = toupper(*si++);
    }

    return CaseString;
}


void stringexplode(string str, string separator, vector<string>* results) {
    size_t found;
    found = str.find_first_of(separator);
    while (found != string::npos) {
        if (found > 0) {
            results->push_back(str.substr(0, found));
        }
        str = str.substr(found + 1);
        found = str.find_first_of(separator);
    }
    if (str.length() > 0) {
        results->push_back(str);
    }
}


string getdomain(string url) {
    if (regex_match("^74\\.125\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?$)", url) != "") return "youtube.com";
    vector<string> resultado;
    if (!url.empty()) {
        stringexplode(url, "/", &resultado);
        if (resultado.size() > 1) {
            url = resultado.at(0);
        }
        resultado.clear();
        stringexplode(url, ".", &resultado);
        if (resultado.size() > 1) {
            if ((resultado.at(resultado.size() - 2)).size() <= 3 &&
                    (resultado.at(resultado.size() - 1)).size() <= 3) {
                return resultado.at(resultado.size() - 3) + "." + resultado.at(resultado.size() - 2) + "." + resultado.at(resultado.size() - 1);
            } else {
                return resultado.at(resultado.size() - 2) + "." + resultado.at(resultado.size() - 1);
            }
        } else return url;
    } else return "";

}


bool file_exists(string strFilename) {
    struct stat stFileInfo;
    if (stat(strFilename.c_str(), &stFileInfo) == 0) {
        return true;
    } else {
        return false;
    }
}


int64_t file_size(string szFileName) {
    struct stat fileStat;
    int err = stat(szFileName.c_str(), &fileStat);
    if (0 != err) return -1;
    return (int64_t) fileStat.st_size;
}


void mkdir_p(const string &pathname) {
    umask(0);
    if (mkdir(pathname.c_str(), 0777) < 0) {
        if (errno == ENOENT) {
            // If we couldn't make the whole directory because of ENOENT (a
            // parent directory doesn't exist), then try recursively to make
            // the immediate parent directory.

            size_t slash = pathname.rfind('/');
            if (slash != string::npos) {
                string prefix = pathname.substr(0, slash);
                mkdir_p(prefix);
                mkdir(pathname.c_str(), 0777);
            }
        }
    }
}


string regex_match(string er, string line) {
    int error;
    regmatch_t match;
    regex_t reg;
    if ((regcomp(&reg, er.c_str(), REG_EXTENDED | REG_NEWLINE)) == 0) {
        error = regexec(&reg, line.c_str(), 1, &match, 0);
        if (error == 0) {
            //cout << "Tamanho: " << line.size() << " Inicio: " << match.rm_so << " Fim: " << match.rm_eo << endl;
            return line.substr(match.rm_so, match.rm_eo - match.rm_so);
        } else {
            return "";
        }
    } else {
        return "";
    }
}


string itoa(int val) {
    char res[1024];
    sprintf(res, "%d", val);
    string str = string(res);
    return str;
}


double now() {
    struct timeval tv;
    gettimeofday(&tv, 0);

    return tv.tv_sec + tv.tv_usec / 1e6;
}


long file_getmodif(string szFileName) {
    struct stat fileStat;
    int err = stat(szFileName.c_str(), &fileStat);
    if (0 != err) return 0;
    return fileStat.st_mtime;
}


int file_setmodif(string szFileName, long fdate) {
    struct utimbuf fmtime;
    if (fdate > 0) {
        fmtime.actime = fdate + 10;
        fmtime.modtime = fdate + 10;
        return utime(szFileName.c_str(), &fmtime);
    } else {
        static struct timespec newtime;
        fmtime.actime = newtime.tv_sec;
        fmtime.modtime = newtime.tv_sec;
        return utime(szFileName.c_str(), &fmtime);
    }

}


string ConvertChar(string lineT) {
    string line = "";
    for (unsigned int i = 0; i < lineT.length(); i++) {
        switch (lineT[i]) {
            case 'a':
                line += "1";
                break;
            case 'b':
                line += "2";
                break;
            case 'c':
                line += "3";
                break;
            case 'd':
                line += "4";
                break;
            case 'e':
                line += "5";
                break;
            case 'f':
                line += "6";
                break;
            case 'g':
                line += "7";
                break;
            case 'h':
                line += "8";
                break;
            case 'i':
                line += "9";
                break;
            case 'j':
                line += "10";
                break;
            case 'k':
                line += "11";
                break;
            case 'l':
                line += "12";
                break;
            case 'm':
                line += "13";
                break;
            case 'n':
                line += "14";
                break;
            case 'o':
                line += "15";
                break;
            case 'p':
                line += "16";
                break;
            case 'q':
                line += "17";
                break;
            case 'r':
                line += "18";
                break;
            case 's':
                line += "19";
                break;
            case 't':
                line += "20";
                break;
            case 'u':
                line += "21";
                break;
            case 'v':
                line += "22";
                break;
            case 'w':
                line += "23";
                break;
            case 'x':
                line += "24";
                break;
            case 'y':
                line += "25";
                break;
            case 'z':
                line += "26";
                break;
            default:
                if (isdigit(lineT[i]))
                    line += lineT[i];
                else
                    line += "27";
                break;

        }
    }

    unsigned long resultado = 0;
    string tempstr = "";
    if (line.length() <= 3)
        line += "282930";

    for (unsigned int fff = 3; fff < line.length(); fff += 3) {
        tempstr = line.substr(0, fff);
        resultado += atoi(tempstr.c_str());
        line = line.substr(fff + 1);
    }

    tempstr = itoa(resultado);
    if (tempstr.length() > 3)
        tempstr = tempstr.substr(tempstr.length() - 3);

    string updir = itoa(atoi(tempstr.substr(1, 1).c_str()) + atoi(tempstr.substr(2, 2).c_str()));

    if (updir.size() > 1)
        updir = updir.substr(1, 1);

    /* END! */
    lineT = "";
    lineT += updir;
    lineT += "/";
    lineT += tempstr[0];
    lineT += "_";
    lineT += tempstr.substr(1);
    return lineT;
}


int disk_use(string path) {
    double bfree, btotal = 0;
    struct statvfs fiData;
    if ((statvfs(path.c_str(), &fiData)) < 0) {
        return -1;
    } else {
        bfree = (((double) fiData.f_frsize) * ((double) fiData.f_bfree));
        btotal = (((double) fiData.f_frsize) * ((double) fiData.f_blocks));
        return ((btotal - bfree) / btotal)*100;
    }
}


const string getFileExtension(string file) {
   size_t pos = file.find_last_of(".");
   if (pos != string::npos)
      return UpperCase(file.substr(pos + 1));
   else
      return UpperCase(file);
}


const string getFileName(string file) {
   size_t pos = file.find_last_of("/");
   if (pos != string::npos) {
      return file.substr(pos + 1);
       //file = file.substr(pos + 1);
      //pos = file.find_last_of("?");
      //if (pos != string::npos)
      //   return file.substr(0,pos);
      //else
      //   return file;
   } else
      return file;
}


O arquivo connectiontohttp2.cpp não é o original do TC3.1, mas não tem nada novo, só fiz uma limpeza do que não era utilizado e consertei uns códigos que estavam deprecated (e geravam warnings de compilação). Ésse arquivo ainda deve sofrer alterações, mas não por enquanto, a não ser as alterações que fizermos para consertar o youtube.

Obrigado pela ajuda. Se precisar de algo mais é só dizer. :o!

Um abraço.
Contribua para que o Projeto BFW permaneça no ar, Doe Click aqui
Contribua com o Bruno Vescovi, Doe Click aqui (pagseguro) ou Click aqui (paypal)
------------------------------------------------------------------------------------------------------------------------------
"Amor não é um sentimento. Amor é uma decisão de fazer o melhor possível para Deus e para o seu próximo."
Avatar do usuário
brunovescovi
BFW Moderator
BFW Add-on Developer
BFW Beneméritos
BFW Manager
BFW Documenter
BFW Expert
 
Mensagens: 3650
Registrado em: Ter Jun 29, 2010 7:27 pm
Localização: Guarapari - ES
BrazilFW Box: Não usando o BFW no momento

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor adrianollima » Seg Mar 26, 2012 5:23 pm

me desculpa se quebrei alguma regra do fórum, mas esses plugins foram passados por aqui entre os usuários, e somente repassei o meu erro afim de evitar que acontessa com outras pessoas, mas mesmo assim pesso desculpas.
Avatar do usuário
adrianollima
BFW Novice
 
Mensagens: 98
Registrado em: Dom Fev 12, 2012 5:41 pm
BrazilFW Box:

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor brunovescovi » Seg Mar 26, 2012 6:38 pm

Boa noite, pessoal.

adrianollima escreveu:me desculpa se quebrei alguma regra do fórum
Não quebrou regra, não, Adriano. Só avisei que não tem como dar suporte aqui pelo fórum. Só podemos tratar aqui o que passou pelos testes e foi homologado. :o!
Não é proibido usar, mas é por conta de cada um. Obriado pelos relatos. :o!

Um abraço.
Contribua para que o Projeto BFW permaneça no ar, Doe Click aqui
Contribua com o Bruno Vescovi, Doe Click aqui (pagseguro) ou Click aqui (paypal)
------------------------------------------------------------------------------------------------------------------------------
"Amor não é um sentimento. Amor é uma decisão de fazer o melhor possível para Deus e para o seu próximo."
Avatar do usuário
brunovescovi
BFW Moderator
BFW Add-on Developer
BFW Beneméritos
BFW Manager
BFW Documenter
BFW Expert
 
Mensagens: 3650
Registrado em: Ter Jun 29, 2010 7:27 pm
Localização: Guarapari - ES
BrazilFW Box: Não usando o BFW no momento

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor apoliano » Seg Mar 26, 2012 10:08 pm

brunovescovi escreveu:Dei uma ajeitada no source do plugin do youtube de acordo com as sugestões aqui apresentadas para apontar MISS caso tenha range. Compilei e testei aqui em 64 bits.
Não sei se funcionou 100% como o esperado porque fiz poucos testes, mas percebi que ao ver alguns vídeos, a informação era acrescentada ao relatório, e às vezes não era acrescentada, ou seja, tudo indica que realmente tem vídeos que está fazendo cache e outros não, justamente como o esperado. :o!

Mas gostaria da ajuda dos senhores para testar essa alteração. O plugin compilado para 32 bits está no link abaixo:
http://www.brazilfw.com.br/users/brunovescovi/addons/3.0/bfwcache/youtube.com.so

Brunoeu to testando o plugin do you tube como pediu, até agora todos os videos que eu assistie, entraram no cache,
só tem alguns videos que tem problema de carregar só 10 segundos efinaliza o video, quesão alguns videos tutoriais do do BFW 3.x postados pelo Elton Bahia.

Mais esse problema já tinha antes da substituição do plugin do youtube, mais mesmo assim a parte de 10 segundos
que carregou do video também entra no cache, pois os relatórios mostram isso.

Então até agora tirando osvideos que carregam somente 10 segundos, tudook aqui :o!
Apoliano Sousa "técnico em Informática" aprendendo linux...
A cada dia meu conhecimento aumenta um pouco mais.
Avatar do usuário
apoliano
BFW Experienced
 
Mensagens: 798
Registrado em: Ter Dez 13, 2011 4:40 pm
Localização: Ubajara-CE
BrazilFW Box: Intel(R) Celeron(R) CPU 420 @ (1x) 1.608 GHz
946.96 MB DDR2 HD 80 Gb SATA
BFW 3.0.260 32 bits - squid - mac x ip - Mysql - phpmyadmin

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor gerardonoh » Seg Mar 26, 2012 10:19 pm

[quote="yoboss"]Hola de nuevo explicare el resultado de mi análisis:
Primero tomemos como ejemplo el mismo vídeo que me sirvió de análisis anteriormente.

http://www.youtube.com/watch?v=MjXU7I6aBpA ................
------------------------------------------------------------------------
en realidad no te esta cacheando los que traen range ya que veo que para eso hicieron el parche: pero segun como veo tendrian el mismo problema, ya que siempre encuentra el id primero y se sale del blucle: [color=#40BF40]aqui lespongo el plugin para que no cachee los de range y solo los que no tengan tome el id y lo cachee:[/color]
#include <iostream>
#include <cstring>
#include <vector>
#include "../utils.cpp"

using namespace std;

string get_videoid(string url){
vector<string> resultado,valor;
string retorna = "";
SearchReplace(url,"?","&");
stringexplode(url, "/", &resultado);
if (resultado.size() > 1){
url = resultado.at(1);
resultado.clear();
stringexplode(url, "&", &resultado);
for (int i=0; i <= resultado.size()-1;i++){
valor.clear();
stringexplode(resultado.at(i), "=", &valor);

if (valor.at(0) == "id" || valor.at(0) == "video_id") {
retorna = valor.at(1);
break;
}
// si el Url del video tiene range entonces dar un resultado en retorna que luego pueda convertirse en un cache miss y romper el bucle
// Se a URL do vídeo possui range, então retorna um resultado que vai ser entendido como MISS e interrompe o loop
if (valor.at(0) == "range"){
retorna = ""; // 0 = cache miss
break;
}

}
}
return retorna;
}

extern "C" resposta getmatch(const string url) {
resposta r;

r.file = get_videoid(url);
// al tener una condicion para analizar !r.file.empty(), y nuestra funcion get_videoid retornar vacio al detectar range se hace cache miss y todo queda OK
// a checagem de r.file.empty() agora serve para apontar cache miss: (01) se não encontrar id e (02) se encontrar range.
if ( !r.file.empty() and
((url.find(".googlevideo.com") != string::npos) or (url.find(".youtube.com") != string::npos) or
(regex_match("74\\.125\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)", url) != "")) and
(url.find("videoplayback") != string::npos) and
(url.find("begin=") == string::npos)) {
r.match = true;
r.domain = "youtube";
r.file += ".flv";
} else {
r.match = false;
}
return r;
Avatar do usuário
gerardonoh
BFW Beneméritos
 
Mensagens: 162
Registrado em: Qui Set 22, 2011 2:35 am
BrazilFW Box: P4 D-core 4gb
500 gb Hd
brazilfw : 3.0.261 64 Bits
dansguardian, X-YouTube-Edu-Filter
Implementado: Univesidad para 250-300 usuarios
3 adsl-Load Balancing

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor gerardonoh » Seg Mar 26, 2012 10:26 pm

Mil disculpas - Sorry el pluging publicado por Brunovescovi es correcto.
>| :aplause:
Avatar do usuário
gerardonoh
BFW Beneméritos
 
Mensagens: 162
Registrado em: Qui Set 22, 2011 2:35 am
BrazilFW Box: P4 D-core 4gb
500 gb Hd
brazilfw : 3.0.261 64 Bits
dansguardian, X-YouTube-Edu-Filter
Implementado: Univesidad para 250-300 usuarios
3 adsl-Load Balancing

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor yoboss » Seg Mar 26, 2012 11:05 pm

Hola hola, alquien me dice donde encontrar instrucciones de como compilar el thunder de sorceforge el 3.1 para poder hacer unas modificaciones al core, se me ocurrió algo que podría ser la solución definitiva pero quiero hacer los test primero antes de postear

Me sirve ubuntu?

:-P :-P :-P
Post Data: No eh podido ni compilar los plugins solo modificar el codigo >|
Descubri que por mas que instale GCC o creo que lo instale Brazil FW no compila :(

Pruevas de hoy:
Descubrí que si compilo algo en Ubuntu y luego lo traigo a Brazil FW este ejecutable no hace nada >|
luego también descubrí que existe un build tree para poder compilar programas para brazilFW
así que estoy descargando Devian 5 y luego intentare instalar ese build tree, y compilar algo..

:?: :?: Estoy por el camino correcto ???
Editado pela última vez por yoboss em Ter Mar 27, 2012 3:35 pm, em um total de 3 vezes.
yoboss
 

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor hcsskt » Seg Mar 26, 2012 11:06 pm

tesssttaannndoo youtube
hcsskt
 

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor gildope » Ter Mar 27, 2012 1:06 pm

O plugin do youtube que Bruno passou para testar, está dando erros quando se acessa o vídeo cacheado. "Ocorreu um erro, tente mais tarde".
gildope
 

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor yoboss » Ter Mar 27, 2012 3:28 pm

Va dar problemas si ya tienes un cache antiguo con pedazos de video mal gravados esos no se van a corregir, la mejor forma de probar con un cache de 0.
yoboss
 

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor reginaldo » Ter Mar 27, 2012 3:41 pm

gildope escreveu:O plugin do youtube que Bruno passou para testar, está dando erros quando se acessa o vídeo cacheado. "Ocorreu um erro, tente mais tarde".

Você zerou o cache depois que colocou o novo plugin?
Contribua para que o Projeto BFW permaneça no ar, Doe Click aqui
Contribua com o reginaldo, Doe, favor enviar e-mail para reginaldo@brazilfw.com.br
-----------------------------------------------------------------------------------------------------
"Disciplina é liberdade. Compaixão é fortaleza. Ter bondade é ter coragem" (Há Tempos [Dado Villa-Lobos/Renato Russo/Marcelo Bonfá])
Avatar do usuário
reginaldo
BFW Mediator
BFW Documenter
BFW Manager
BFW 3.x Update
 
Mensagens: 12686
Registrado em: Sáb Ago 27, 2005 12:10 pm
Localização: Rio de Janeiro - RJ
BrazilFW Box: Máquina Física
CPU: Intel Core i3 Model 530
Memória: 8.00 GiB / 2 Links
BFW 3.0.262 64 bits
Serviços Ativos: Control MAC, QOS
Addons: EBackup, EPM e Squid 3.5.x

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor apoliano » Ter Mar 27, 2012 5:23 pm

reginaldo escreveu: gildope escreveu:O plugin do youtube que Bruno passou para testar, está dando erros quando se acessa o vídeo cacheado. "Ocorreu um erro, tente mais tarde".


Você zerou o cache depois que colocou o novo plugin?

Aqui o plugin funcionou legal, o erro que dá nos videos (Ocorreu um erro. Tente novamente mais tarde)
esse erro não é novidade, desde o final de 2011 que da esse erro em alguns videos do youtube, pra mim o erro não tem haver com o novo plugin, eu limpei o cache antes de substituir o plugin.
Apoliano Sousa "técnico em Informática" aprendendo linux...
A cada dia meu conhecimento aumenta um pouco mais.
Avatar do usuário
apoliano
BFW Experienced
 
Mensagens: 798
Registrado em: Ter Dez 13, 2011 4:40 pm
Localização: Ubajara-CE
BrazilFW Box: Intel(R) Celeron(R) CPU 420 @ (1x) 1.608 GHz
946.96 MB DDR2 HD 80 Gb SATA
BFW 3.0.260 32 bits - squid - mac x ip - Mysql - phpmyadmin

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor gildope » Ter Mar 27, 2012 5:27 pm

Havia me esquecido de limpar o cache do BFWCACHE, então vou começar de novo os testes. :mrgreen:
gildope
 

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor goodposting » Ter Mar 27, 2012 6:56 pm

adrianollima escreveu:olá ! Meus clientes estão reclamando de uma coisa que só percebi hoje, a imagem no facebook fica em má qualidade ou seja em baixa resolução, como não mexo muito não percebi, e hoje entrei só pra ver e realmente eles tem razão, alguém mais percebeu isso ? ou é só comigo ?


como ja foi dito não é plugin oficial.

mas como TooR ja passou o fonte pra bruno esse trem terá q ser corrigido.... rsrs o mesmo acontece com o plugin do orkut.

tive reclamações de clientes com os mesmos detalhes q vc postou sobre facebook. orkut ta na mesma. isso além de ficar lento depois de muito cache armazenado.

:o!
Avatar do usuário
goodposting
BFW Beneméritos
 
Mensagens: 1623
Registrado em: Qua Jan 04, 2006 11:53 pm
Localização: ES - Brasil
BrazilFW Box: Phenom X-6 1100T, 32GB DDR3 kingston, 480 GB SSD Corsair sata 3, ECS Black series A890gxma, 7 ETH's gigabit, fonte corsair 500w - BFW 261 64 bits = Squid nativo, QoS, Ip x mac, Subredes e EPM 2.0

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor Thiago » Ter Mar 27, 2012 7:08 pm

yoboss escreveu:Pruevas de hoy:
Descubrí que si compilo algo en Ubuntu y luego lo traigo a Brazil FW este ejecutable no hace nada >|
luego también descubrí que existe un build tree para poder compilar programas para brazilFW
así que estoy descargando Devian 5 y luego intentare instalar ese build tree, y compilar algo..

:?: :?: Estoy por el camino correcto ???

Terá de instalar o build-tree e compilar o mesmo no BFW.
Sobre o TC , tenho ele compilado rodando junto do BFW que modifiquei (BFW + Lusca+ TC) , o problema era so ter que esperar gerar as 3 imagens.
O fonte de uma das primeiras versões do BFW cache poderia ajudar muitos , substituiria o TC pelo BFW cache e as melhorias que ja fora feitas até então.
No mais ao yoboss, baixe a build-tree e compile o TC ou os plugins , do contrario será problemas se compilado em outra distro.
Edit: Para baixar a BT em outro linux, use;
Código: Selecionar todos
mkdir build-treeBFW3
rsync -DHlravzptg --delete www.brazilfw.com.br::brazilfw ./build-treeBFW3

Gracias Daniel :mrgreen:
Editado pela última vez por Thiago em Ter Mar 27, 2012 7:24 pm, em um total de 1 vez.
Thiago
 

Re: Addon BFW Cache - Acompanhamento - Parte 4

Mensagempor Lelouch » Ter Mar 27, 2012 7:22 pm

Hola Yoboss,

Una forma es armarte en una máquina con BFW3 de 64 bits, en el addon manager te da la opción de descargar el BuildTree para compilar dentro del BFW.
Otra forma es usar Ubuntu, Debian, Mint, etc (yo uso mint de 32 bits y Arch de 64bits), en el Arch de 64 bits tengo el BuildTree del BFW, en el otro compilo a 32 bits y paso al BFW, claro que algunas veces en el Arch hago lo mismo, compilo y luego paso sin entrar en el BuildTree del BFW, no se si eso sea bueno o malo, pero pues igual me a servido xD.

Espero haber ayudado,



Lelouch
GNU/Linux addict, instead of Linux addict.
Sou, machigatteita no wa ore ja nai! Sekai no hou da!...
Sekai wa kawaru! Kaerareru...

Hangyaku no Rurūshu...

New scheme: BFW3(LB) - BFW3BridgeCache - ArgentoBridgeQoS
Avatar do usuário
Lelouch
BFW Beneméritos
 
Mensagens: 1324
Registrado em: Dom Out 05, 2008 7:39 pm
Localização: #!/bin/sh
BrazilFW Box: BrazilFW: RAM 3GB, ATHLON X2 5600+, HDD 160GB+120GB, LB: 2Mb+8Mb.
BFW3 BuildTree on GNU/Linux Archlinux 64 bits.

Re: Addon BFW Cache 1.0 - Acompanhamento - Parte 4  TOPIC_SOLVED

Mensagempor brunovescovi » Ter Mar 27, 2012 7:34 pm

Boa noite, pessoal.

Este tópico ficou bem grande, graças a Deus e à participação de todos.

Vamos finalizar este tópico e continuamos neste aqui:
http://www.brazilfw.com.br/forum/viewtopic.php?f=54&t=82877

Lá continuamos de onde paramos aqui. :o!

Peço a todos para mantermos em foco o assunto do BFW Cache. Perguntas e respostas sobre Build Tree e devem ser discutidas em tópicos específicos.

Um abraço.
Contribua para que o Projeto BFW permaneça no ar, Doe Click aqui
Contribua com o Bruno Vescovi, Doe Click aqui (pagseguro) ou Click aqui (paypal)
------------------------------------------------------------------------------------------------------------------------------
"Amor não é um sentimento. Amor é uma decisão de fazer o melhor possível para Deus e para o seu próximo."
Avatar do usuário
brunovescovi
BFW Moderator
BFW Add-on Developer
BFW Beneméritos
BFW Manager
BFW Documenter
BFW Expert
 
Mensagens: 3650
Registrado em: Ter Jun 29, 2010 7:27 pm
Localização: Guarapari - ES
BrazilFW Box: Não usando o BFW no momento

Anterior

Voltar para Certified Addons of Project BFW

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes