# Module `onionr.coredb.keydb.transportinfo`

Onionr - Private P2P Communication

get or set transport address meta information

Source code

    '''
        Onionr - Private P2P Communication

        get or set transport address meta information
    '''
    '''
        This program is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation, either version 3 of the License, or
        (at your option) any later version.

        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.

        You should have received a copy of the GNU General Public License
        along with this program.  If not, see <https://www.gnu.org/licenses/>.
    '''
    import sqlite3
    from .. import dbfiles
    def get_address_info(address, info):
        '''
            Get info about an address from its database entry

            address text, 0
            type int, 1
            knownPeer text, 2
            speed int, 3
            success int, 4
            powValue    5
            failure int 6
            lastConnect 7
            trust       8
            introduced  9
        '''

        conn = sqlite3.connect(dbfiles.address_info_db, timeout=30)
        c = conn.cursor()

        command = (address,)
        infoNumbers = {'address': 0, 'type': 1, 'knownPeer': 2, 'speed': 3, 'success': 4, 'powValue': 5, 'failure': 6, 'lastConnect': 7, 'trust': 8, 'introduced': 9}
        info = infoNumbers[info]
        iterCount = 0
        retVal = ''

        for row in c.execute('SELECT * FROM adders WHERE address=?;', command):
            for i in row:
                if iterCount == info:
                    retVal = i
                    break
                else:
                    iterCount += 1
        conn.close()

        return retVal

    def set_address_info(address, key, data):
        '''
            Update an address for a key
        '''

        conn = sqlite3.connect(dbfiles.address_info_db, timeout=30)
        c = conn.cursor()

        command = (data, address)

        if key not in ('address', 'type', 'knownPeer', 'speed', 'success', 'failure', 'powValue', 'lastConnect', 'lastConnectAttempt', 'trust', 'introduced'):
            raise ValueError("Got invalid database key when setting address info, must be in whitelist")
        else:
            c.execute('UPDATE adders SET ' + key + ' = ? WHERE address=?', command)
            conn.commit()
        conn.close()

## Functions

`def get_address_info(address, info)`

  Get info about an address from its database entry

  address text, 0 type int, 1 knownPeer text, 2 speed int, 3 success int, 4 powValue 5 failure int 6 lastConnect 7 trust 8 introduced 9

  Source code

      def get_address_info(address, info):
          '''
              Get info about an address from its database entry

              address text, 0
              type int, 1
              knownPeer text, 2
              speed int, 3
              success int, 4
              powValue    5
              failure int 6
              lastConnect 7
              trust       8
              introduced  9
          '''

          conn = sqlite3.connect(dbfiles.address_info_db, timeout=30)
          c = conn.cursor()

          command = (address,)
          infoNumbers = {'address': 0, 'type': 1, 'knownPeer': 2, 'speed': 3, 'success': 4, 'powValue': 5, 'failure': 6, 'lastConnect': 7, 'trust': 8, 'introduced': 9}
          info = infoNumbers[info]
          iterCount = 0
          retVal = ''

          for row in c.execute('SELECT * FROM adders WHERE address=?;', command):
              for i in row:
                  if iterCount == info:
                      retVal = i
                      break
                  else:
                      iterCount += 1
          conn.close()

          return retVal

`def set_address_info(address, key, data)`

  Update an address for a key

  Source code

      def set_address_info(address, key, data):
          '''
              Update an address for a key
          '''

          conn = sqlite3.connect(dbfiles.address_info_db, timeout=30)
          c = conn.cursor()

          command = (data, address)

          if key not in ('address', 'type', 'knownPeer', 'speed', 'success', 'failure', 'powValue', 'lastConnect', 'lastConnectAttempt', 'trust', 'introduced'):
              raise ValueError("Got invalid database key when setting address info, must be in whitelist")
          else:
              c.execute('UPDATE adders SET ' + key + ' = ? WHERE address=?', command)
              conn.commit()
          conn.close()