Ir para o conteúdo

 Voltar a Linguagem Lua
Tela cheia

tcp.lua - assertion failure

9 de Maio de 2009, 20:35 , por Desconhecido - | Ninguém seguindo este artigo por enquanto.
Visualizado 63 vezes

Boa noite,

Sou iniciante na área de TV Digital e sei que este é um assunto que já foi muito discutido, lí diversas threads sobre o assunto aqui no forum, porém não consegui resolver o meu problema...

 Estou tentando fazer uma chamada simples pelo canal de retorno usando o seguinte código:

------------ NCL ----------------

<?xml version="1.0" encoding="ISO-8859-1"?>
<ncl id="nclClicks" xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile">
    <head/>
    <body>
        <port component="lua1" id="entryPoint"/>
        <media id="lua1" src="1.lua"/>
    </body>
</ncl>
-------------------------------------

---------- lua1.lua ------------

require 'tcp'

function handler (evt)
    if evt.class  ~= 'ncl' then
        return
    end
   
    tcp.execute(
        function ()
           print ("-- start TCP --")          
           tcp.connect('www.google.com.br', 80)      
           tcp.send('GET /search?q='..'globo'..'\n')
           local result = tcp.receive()      
           print ('Result: ' .. result)
           tcp.disconnect()
        end
    )
end

event.register(handler)

-------------------------------------

E estou recebendo o seguinte erro:

---------- Erro ---------------

compile time: 9 ms
ComponentManager::getComponent opening component 'libginganclluapadapter.so'
ComponentManager::getComponent component 'libginganclluapadapter.so' OPENED
ComponentManager::getComponent opening component 'libgingaccplalua.so'
ComponentManager::getComponent component 'libgingaccplalua.so' OPENED
FormatterScheduler::runProceduralAction preparing display
FormatterFocusManager::showObject Warning!  descriptor is null.
-- start TCP --
reloaded DNS configuration (resolv.conf)
changing nameserver to 192.168.185.2
PANIC: unprotected error in call to Lua API (./tcp.lua:20: ./tcp.lua:101: assertion failed!)
 (!!!)  *** WARNING [Application exited without deinitialization of DirectFB!] *** [core.c:813 in dfb_core_deinit_check()]
 ...

----------------------------------

O arquivo tcp.lua que estou usando é o que está disponível no exemplo 06 do tutorial do Francisco, vou coloca-lo abaixo com as linhas 20 e 101 destacadas.

---------- tcp.lua --------------

 --[[
-- TODO:
-- * nao aceita `tcp.execute` reentrante
--]]

local _G, coroutine, event, assert, pairs, type
    = _G, coroutine, event, assert, pairs, type
local s_sub = string.sub

module 'tcp'

local CONNECTIONS = {}

local current = function ()
    return assert(CONNECTIONS[assert(coroutine.running())])
end

local resume = function (co, ...)
    assert(coroutine.status(co) == 'suspended')
    assert(coroutine.resume(co, ...))
    if coroutine.status(co) == 'dead' then
        CONNECTIONS[co] = nil
    end
end

function handler (evt)
    if evt.class ~= 'tcp' then return end

    if evt.type == 'connect' then
        for co, t in pairs(CONNECTIONS) do
            if (t.waiting == 'connect') and
               (t.host == evt.host) and (t.port == evt.port) then
                t.connection = evt.connection
                t.waiting = nil
                resume(co)
                break
            end
        end
        return
    end

    if evt.type == 'disconnect' then
        for co, t in pairs(CONNECTIONS) do
            if t.waiting and
               (t.connection == evt.connection) then
                t.waiting = nil
                resume(co, nil, 'disconnected')
            end
        end
        return
    end

    if evt.type == 'data' then
        for co, t in pairs(CONNECTIONS) do
            if (t.waiting == 'data') and
               (t.connection == evt.connection) then
                resume(co, evt.value)
            end
        end
        return
    end
end
event.register(handler)

function execute (f, ...)
    resume(coroutine.create(f), ...)
end

function connect (host, port)
    local t = {
        host    = host,
        port    = port,
        waiting = 'connect'
    }
    CONNECTIONS[coroutine.running()] = t

    event.post {
        class = 'tcp',
        type  = 'connect',
        host  = host,
        port  = port,
    }
    
    return coroutine.yield()
end

function disconnect ()
    local t = current()
    event.post {
        class      = 'tcp',
        type       = 'disconnect',
        connection = assert(t.connection),
    }
end

function send (value)
    local t = current()
    event.post {
        class      = 'tcp',
        type       = 'data',
        connection = assert(t.connection),
        value      = value,
    }
end

function receive (pattern)
    pattern = pattern or '' -- TODO: '*l'/number
    local t = current()
    t.waiting = 'data'
    t.pattern = pattern
    if s_sub(pattern, 1, 2) ~= '*a' then
        return coroutine.yield()
    end
    local all = ''
    while true do
        local ret = coroutine.yield()
        if ret then
            all = all .. ret
        else
            return all
        end
    end
end

-------------------------------------

Estou usando a versão 0.10.1 do STB...

 Obrigado!

Autor: Rafael Pinto


1111 comentários

  • 61492e790b1c5b7d6c0dbfabbee13c7f?only path=false&size=50&d=404E. Mattos(usuário não autenticado)
    10 de Maio de 2009, 19:37

     

    Também gostaria de saber! Tô com o mesmo erro.

  • 0e0bb701f1b73af0bdb5e06871f41322?only path=false&size=50&d=404Rafael Pinto(usuário não autenticado)
    10 de Maio de 2009, 19:43

     

    Eu ví que tem como instalar o módulo LuaSocket no STB e usa-lo para fazer a conexão, mas eu gostaria de fazer o software seguindo o padrão de referência... 

    Qualquer ajuda é bem vinda.

    Obrigado,

  • 0e0bb701f1b73af0bdb5e06871f41322?only path=false&size=50&d=404Rafael Pinto(usuário não autenticado)
    14 de Maio de 2009, 13:18

     

    Alguém conseguiu utilizar o canal de retorno sem ser pelo LuaSocket nessa versão do STB(0.10.1)?

     Obrigado,

    • 820d3515c25dc6c1319875ee4fed9224?only path=false&size=50&d=404Carlos de Salles Soares Neto(usuário não autenticado)
      14 de Maio de 2009, 13:31

       

      Consigo usar isso normalmente, mas é um problema que está sendo apontado por vários outros membros da comunidade.

      O melhor caminho talvez seja olhar o código fonte do Ginga para procurar se o problema está lá ou se é uma questão de configuração de rede específica de seu caso.

       Carlos

      • A68ad07224f391c76c9ea2386eb64099?only path=false&size=50&d=404Nelmissom Pinheiro(usuário não autenticado)
        18 de Agosto de 2009, 20:14

         

        Carlos....    Sou novato no Ginga ...  estou com este problema em parte....

        No trabalho que é uma rede local ...  eu consigo rodar um aplicativo legal ...

        Porém em casa ...  dá este erro.. 'changing servername'  e aparece o ip da VMWare...

        Vc. sabe me informar qual é o motivo....  e  se puder me ajudar a chegar a uma solução...

        desde já agradeço! 

  • D8c48d948ca122bbbaafdea5f971fec6?only path=false&size=50&d=404Marco Munhoz(usuário não autenticado)
    18 de Outubro de 2009, 22:23

     

    Pessoal, temos feito vários testes com o TCP.lua e de uma maneira geral consiguimos  acesso a vários da internet.  O que geralmente acontece são as configurações de rede  de cada ambiente. Por isso,  é importante conhecer o seu ambiente de rede pois isto afetará diretamente a sua aplicação.

     Questões a pensar :

    Qual o versão do  Vmware player ?

    Última Versão vmware   3.0  www.​vmwa​re.c​om/d​ownl​oads
     Qual o sistema operacional ?

     Tem uma diferença (Windows e linux ) na formação do DNS no /etc/resolv.conf  da máquina virtual.

    Qual o modo que esta utilizando a máquina virtual ?

    Como esta configurada a rede no vmware ?

    Bridged ou NAT ?

    Sua rede tem servidor DHCP ?

    Tem roteador ?

    Tem proxy ?

    Marco Munhoz

     

    • 80ad6d750fa2991b12d6eb9bf63c1eea?only path=false&size=50&d=404Márcio Franco(usuário não autenticado)
      23 de Outubro de 2009, 12:02

       

      Marco,

      Tenho que testar o canal de retorno utilizando LUA.

      Minha configuração:

      VMware : 2.5.3 build-185404
      S.O. : Windows
      Modo Rede: Bridged
      Tenho DHCP
      Tenho Proxy

      Estou tentando executar o link: nomeservidor/insere.php?voto=1

      Mas o voto nunca chega no servidor. (digitando no navegador esse link, o voto insere no bd normalmente)

      O código LUA é esse:

      require 'tcp'
      tcp.execute(
      function ()
      tcp.connect('nomeservidor.com.br', 80)   *Esse servidor esta na rede local
      tcp.send('GET /po/insere.php?voto=1 HTTP/1.0')
      *Tentei também o comando: tcp.send('GET /po/insere.php?voto=1\n')
      tcp.disconnect()
      end
      )

      O que pode estar errado? 

      • 65181a6a9fb8c0e192b65732f79daa4a?only path=false&size=50&d=404Samir Cortás(usuário não autenticado)
        4 de Novembro de 2009, 20:01

         

        Estou com um problema bem parecido com esse, gostaria de saber se existe alguma solução ?

         

        Obrigado

      • D8c48d948ca122bbbaafdea5f971fec6?only path=false&size=50&d=404Marco Munhoz(usuário não autenticado)
        9 de Novembro de 2009, 10:03

         

        Marcio ! bom dia, desculpe a demora na resposta, estava fora, impossibilitado de responder nos últimos dias. Se não ainda não teve resposta, podemos continuar o tópico, estudando algumas  causas prováveis de erro, pois   quase todos são geralmente  ligados a configuração de rede e não do código. Começando pelas situações mais simples mas que podem complicar a nossa vida :          

        Primeira situação :

        tcp.connect('nomeservidor.com.br', 80) 

        O nome do servidor tem que ser válido,  tem que estar cadastrado no DNS de sua rede.

        Segunda situação :

        Dentro da máquina virtual (set-top box)

        /etc/resolv.conf

        É necessário o nome de um servidor DNS interno  ou público.

        Caso não resolver continuamos ...

         

        Marco Munhoz

         

        • 80ad6d750fa2991b12d6eb9bf63c1eea?only path=false&size=50&d=404Márcio Franco(usuário não autenticado)
          16 de Novembro de 2009, 14:46

           

          Boa Tarde Marco,

          Obrigado pela ajuda, vou fazer alguns testes com suas dicas.

          Abraço,

          Márcio

          2009/11/9

          > Forum: Linguagem Lua
          > Thread: tcp.lua - assertion failure
          > Author: Marco Munhoz
          > Posted: 2009-11-09 10:03:39.241532-02
          >
          > Marcio ! bom dia, desculpe a demora na resposta, estava fora,
          > impossibilitado de responder nos últimos dias. Se não ainda não teve
          > resposta, podemos continuar o tópico, estudando algumas causas prováveis de
          > erro, pois quase todos são geralmente ligados a configuração de rede e
          > não do código. Começando pelas situações mais simples mas que podem
          > complicar a nossa vida :
          >
          > Primeira situação :
          >
          > tcp.connect('nomeservidor.com.br', 80)
          >
          > O nome do servidor tem que ser válido, tem que estar cadastrado no DNS de
          > sua rede.
          >
          > Segunda situação :
          >
          > Dentro da máquina virtual (set-top box)
          >
          > /etc/resolv.conf
          >
          > É necessário o nome de um servidor DNS interno ou público.
          >
          > Caso não resolver continuamos ...
          >
          >
          >
          > Marco Munhoz
          >
          >
          >
          >
          >
          > Recebendo correspondência demais? Gerencie suas notificações em:
          > www.​soft​ware​publ​ico.​gov.​br/n​otif​icat​ions​/man​age
          >

Concurso ITU-T de Aplicações para IPTV 2012

13 de Agosto de 2012, 19:38, por Desconhecido

Gostaríamos de lembrar aos possíveis interessados que o prazo de registro para participação no Concurso ITU-T de Aplicações para IPTV 2012 (IPTV Application Challenge) se encerra nesta semana, dia 15 de agosto de 2012. Já o prazo para a submissão de aplicações se encerra no dia 07 de setembro de 2012.



NCL Eclipse 1.6 disponível

10 de Janeiro de 2012, 21:19, por Desconhecido

Caros membros da Comunidade Ginga,



Concursos de Aplicações Ginga-NCL

22 de Setembro de 2011, 3:22, por Desconhecido

    Gostaríamos de relembra-los de que há dois concursos de aplicações Ginga-NCL com inscrições ainda abertas. O convite é aberto a toda a comunidade de desenvolvedores de aplicações para o Middleware Ginga-NCL, em nível internacional. São os seguintes concursos:



Novas versões: Ginga e Ginga-NCL Virtual Set-top Box (v.0.12.3)

1 de Agosto de 2011, 20:58, por Desconhecido



Algumas Boas Notícias da Comunidade Ginga

28 de Julho de 2011, 21:31, por Desconhecido

Autor: Roberto Azevedo