示例#1
0
    def connect(self):
        u"""Conecta ao Papovox via socket.

        Retorna booleano indicando se a conexão foi bem-sucedida.
        Bloqueia aguardando Papovox conectar.
        Define atributos:
            self.server_socket
            self.socket
            self.addr
            self.nickname
        """
        try:
            self.server_socket = socket.socket(socket.AF_INET,
                                               socket.SOCK_STREAM)
            # Reutilizar porta já aberta
            #self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
            self.server_socket.bind((self.host, self.port))
            self.server_socket.listen(1)

            log.debug(u"XMPPVOX servindo em %s:%s", self.host, self.port)

            # Conecta ao Papovox ----------------------------------------------#
            try:
                self._accept()
            except socket.error:
                return False
            #------------------------------------------------------------------#
            return True
        except socket.error, e:
            log.error(
                safe_unicode(e.message)
                or u" ".join(map(safe_unicode, e.args)))
            sys.exit(1)
示例#2
0
    def connect(self):
        u"""Conecta ao Papovox via socket.

        Retorna booleano indicando se a conexão foi bem-sucedida.
        Bloqueia aguardando Papovox conectar.
        Define atributos:
            self.server_socket
            self.socket
            self.addr
            self.nickname
        """
        try:
            self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            # Reutilizar porta já aberta
            #self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
            self.server_socket.bind((self.host, self.port))
            self.server_socket.listen(1)

            log.debug(u"XMPPVOX servindo em %s:%s", self.host, self.port)

            # Conecta ao Papovox ----------------------------------------------#
            try:
                self._accept()
            except socket.error:
                return False
            #------------------------------------------------------------------#
            return True
        except socket.error, e:
            log.error(safe_unicode(e.message) or u" ".join(map(safe_unicode, e.args)))
            sys.exit(1)
示例#3
0
def main():
    u"""Executa o cliente XMPP e o servidor compatível com Papovox.

    Esta função é o ponto de partida da execução do XMPPVOX."""
    # Configuração.
    args = parse_command_line()
    configure_logging(args.verbose)
    S.show_code = args.show_code
    returncode = 0
    try:
        # read/create machine id as soon as possible
        # for installation tracking purposes
        machine_id = tracker.machine_id()
        # check if we need to use the launch script
        # the launch script uses ScriptVox to
        # ask the user for JID and password,
        # then calls XMMPVOX again with arguments
        need_launch_script = (BUNDLED and len(sys.argv) == 1)
        if need_launch_script:
            import xmppvox.prod_utils as utils
            returncode = utils.do_the_magic()
        else:
            # normal execution
            host, port = args.host, args.port
            jid, password = get_jid_and_password(args.jid, args.password)
            returncode = start_client_server(machine_id, host, port, jid,
                                             password)
    except KeyboardInterrupt:
        returncode = 1
    except Exception, e:
        log.critical(safe_unicode(e))
        returncode = 1
示例#4
0
def main():
    u"""Executa o cliente XMPP e o servidor compatível com Papovox.

    Esta função é o ponto de partida da execução do XMPPVOX."""
    # Configuração.
    args = parse_command_line()
    configure_logging(args.verbose)
    S.show_code = args.show_code
    returncode = 0
    try:
        # read/create machine id as soon as possible
        # for installation tracking purposes
        machine_id = tracker.machine_id()
        # check if we need to use the launch script
        # the launch script uses ScriptVox to
        # ask the user for JID and password,
        # then calls XMMPVOX again with arguments
        need_launch_script = (BUNDLED and len(sys.argv) == 1)
        if need_launch_script:
            import xmppvox.prod_utils as utils
            returncode = utils.do_the_magic()
        else:
            # normal execution
            host, port = args.host, args.port
            jid, password = get_jid_and_password(args.jid, args.password)
            returncode = start_client_server(machine_id, host, port, jid, password)
    except KeyboardInterrupt:
        returncode = 1
    except Exception, e:
        log.critical(safe_unicode(e))
        returncode = 1
示例#5
0
 def disconnect(self):
     u"""Desliga a conexão com o Papovox."""
     log.debug(u"Encerrando conexão com o Papovox...")
     try:
         self.socket.shutdown(socket.SHUT_RDWR)
         self.socket.close()
     except socket.error, e:
         log.debug("Client socket: %s", safe_unicode(e))
示例#6
0
def track_installation(data):
    u"""Informa tracker central sobre esta instância do XMPPVOX."""
    try:
        r = requests.post("{}1/installation/new".format(TRACKER_URL), data=data)
        r.raise_for_status()
    except requests.exceptions.RequestException, e:
        log.warn(u"Falha na ativação do XMPPVOX: %s", safe_unicode(e))
        return False
示例#7
0
 def disconnect(self):
     u"""Desliga a conexão com o Papovox."""
     log.debug(u"Encerrando conexão com o Papovox...")
     try:
         self.socket.shutdown(socket.SHUT_RDWR)
         self.socket.close()
     except socket.error, e:
         log.debug("Client socket: %s", safe_unicode(e))
示例#8
0
def ping_once(session_id, machine_id):
    try:
        r = requests.post("{}1/session/ping".format(TRACKER_URL),
                          data=dict(session_id=session_id,
                                    machine_id=machine_id))
        r.raise_for_status()
        log.debug(u"PING da sessão: %s", session_id)
    except requests.exceptions.RequestException, e:
        log.error(u"PING falhou: %s", safe_unicode(e))
示例#9
0
def close_session(session_id, machine_id):
    u"""Encerra uma sessão no tracker central do XMPPVOX."""
    try:
        r = requests.post("{}1/session/close".format(TRACKER_URL),
                          data=dict(session_id=session_id,
                                    machine_id=machine_id))
        r.raise_for_status()
        session_id = r.text.strip()
        log.debug(u"Sessão encerrada: %s", session_id)
    except requests.exceptions.RequestException, e:
        session_id = None
        log.error(u"Falha ao encerrar sessão: %s", safe_unicode(e))
示例#10
0
    def process(self, xmpp):
        u"""Processa mensagens do Papovox para a rede XMPP.

        Mensagens podem conter comandos para o XMPPVOX.
        Nota: esta função só termina caso ocorra algum erro ou a conexão com o
              Papovox seja perdida.
        """
        try:
            while True:
                data = self.recvmessage()
                # Tenta executar algum comando contido na mensagem.
                if commands.process_command(xmpp, data, self):
                    # Caso algum comando seja executado, sai do loop e passa
                    # para a próxima mensagem.
                    continue
                else:
                    # Caso contrário, envia a mensagem para a rede XMPP.
                    self.send_xmpp_message(xmpp, data)
        except socket.error, e:
            log.debug(safe_unicode(e))
示例#11
0
    def process(self, xmpp):
        u"""Processa mensagens do Papovox para a rede XMPP.

        Mensagens podem conter comandos para o XMPPVOX.
        Nota: esta função só termina caso ocorra algum erro ou a conexão com o
              Papovox seja perdida.
        """
        try:
            while True:
                data = self.recvmessage()
                # Tenta executar algum comando contido na mensagem.
                if commands.process_command(xmpp, data, self):
                    # Caso algum comando seja executado, sai do loop e passa
                    # para a próxima mensagem.
                    continue
                else:
                    # Caso contrário, envia a mensagem para a rede XMPP.
                    self.send_xmpp_message(xmpp, data)
        except socket.error, e:
            log.debug(safe_unicode(e))
示例#12
0
def new_session(jid, machine_id):
    u"""Cria uma nova sessão no tracker central do XMPPVOX."""
    message = None
    try:
        r = requests.post("{}1/session/new".format(TRACKER_URL),
                          data=dict(jid=jid,
                                    machine_id=machine_id,
                                    xmppvox_version=__version__))
        if r.status_code == requests.codes.forbidden:
            message = r.text.strip()
        r.raise_for_status()
        try:
            session_id, message = r.text.split(None, 1)
        except ValueError:
            session_id = r.text.strip()
        log.debug(u"Sessão criada: %s", session_id)
    except requests.exceptions.RequestException, e:
        session_id = None
        if message is None:
            message = (u"Problema com o servidor do XMPPVOX. "
                       u"Por favor, tente conectar novamente mais tarde.\n\n"
                       u"Se o problema persistir, visite http://xmppvox.rodolfocarvalho.net "
                       u"para obter ajuda.")
        log.error(u"Falha ao obter identificador de sessão: %s", safe_unicode(e))
示例#13
0
        log.info(u"Conectado ao Papovox.")
        log.debug(u"Apelido: %s", self.nickname)

    def disconnect(self):
        u"""Desliga a conexão com o Papovox."""
        log.debug(u"Encerrando conexão com o Papovox...")
        try:
            self.socket.shutdown(socket.SHUT_RDWR)
            self.socket.close()
        except socket.error, e:
            log.debug("Client socket: %s", safe_unicode(e))
        try:
            self.server_socket.shutdown(socket.SHUT_RDWR)
            self.server_socket.close()
        except socket.error, e:
            log.debug("Server socket: %s", safe_unicode(e))

    # Funções de integração com o cliente XMPP --------------------------------#

    def process(self, xmpp):
        u"""Processa mensagens do Papovox para a rede XMPP.

        Mensagens podem conter comandos para o XMPPVOX.
        Nota: esta função só termina caso ocorra algum erro ou a conexão com o
              Papovox seja perdida.
        """
        try:
            while True:
                data = self.recvmessage()
                # Tenta executar algum comando contido na mensagem.
                if commands.process_command(xmpp, data, self):
示例#14
0
        log.info(u"Conectado ao Papovox.")
        log.debug(u"Apelido: %s", self.nickname)

    def disconnect(self):
        u"""Desliga a conexão com o Papovox."""
        log.debug(u"Encerrando conexão com o Papovox...")
        try:
            self.socket.shutdown(socket.SHUT_RDWR)
            self.socket.close()
        except socket.error, e:
            log.debug("Client socket: %s", safe_unicode(e))
        try:
            self.server_socket.shutdown(socket.SHUT_RDWR)
            self.server_socket.close()
        except socket.error, e:
            log.debug("Server socket: %s", safe_unicode(e))

    # Funções de integração com o cliente XMPP --------------------------------#

    def process(self, xmpp):
        u"""Processa mensagens do Papovox para a rede XMPP.

        Mensagens podem conter comandos para o XMPPVOX.
        Nota: esta função só termina caso ocorra algum erro ou a conexão com o
              Papovox seja perdida.
        """
        try:
            while True:
                data = self.recvmessage()
                # Tenta executar algum comando contido na mensagem.
                if commands.process_command(xmpp, data, self):