Пример #1
0
 def __init__(self, sec_params, name, port, host, provider_id, privk=None, pubk=None):
     self.name = name
     self.port = port
     self.host = host
     self.privk = privk or sec_params.group.G.order().random()
     self.pubk = pubk or (self.privk * sec_params.group.G.generator())
     self.crypto_client = ClientCore((sec_params, self.config_params), self.name,
                                     self.port, self.host, self.privk, self.pubk)
     self.provider = Provider(name=provider_id)
 def select_all_providers(self):
     providers_info = self.select_all('Providers')
     providers = []
     for prv in providers_info:
         providers.append(
             Provider(str(prv[1]), prv[2], str(prv[3]),
                      petlib.pack.decode(prv[4])))
     return providers
Пример #3
0
class LoopixClient(DatagramProtocol):
    jsonReader = JSONReader(
        os.path.join(os.path.dirname(__file__), 'config.json'))
    config_params = jsonReader.get_client_config_params()
    output_buffer = Queue()
    process_queue = ProcessQueue()
    reactor = reactor
    resolvedAdrs = {}

    def __init__(self,
                 sec_params,
                 name,
                 port,
                 host,
                 provider_id,
                 privk=None,
                 pubk=None):
        self.name = name
        self.port = port
        self.host = host
        self.privk = privk or sec_params.group.G.order().random()
        self.pubk = pubk or (self.privk * sec_params.group.G.generator())
        self.crypto_client = ClientCore((sec_params, self.config_params),
                                        self.name, self.port, self.host,
                                        self.privk, self.pubk)
        self.provider = Provider(name=provider_id)
        self.latency_file = open('latency.csv', 'a')

    def startProtocol(self):
        log.msg("[%s] > Started" % self.name)
        self.get_network_info()
        self.get_provider_data()
        self.subscribe_to_provider()
        self.turn_on_packet_processing()
        self.make_loop_stream()
        self.make_drop_stream()
        self.make_real_stream()

    def get_network_info(self):
        self.dbManager = DatabaseManager(self.config_params.DATABASE_NAME)
        self.register_mixes(self.dbManager.select_all_mixnodes())
        self.register_providers(self.dbManager.select_all_providers())
        self.register_friends(self.dbManager.select_all_clients())
        self.provider = self.dbManager.select_provider_by_name(
            self.provider.name)
        log.msg("[%s] > Registered network information" % self.name)

    def get_provider_data(self):
        self.provider = self.dbManager.select_provider_by_name(
            self.provider.name)
        try:
            result = socket.gethostbyname(self.provider.host)
            self.provider = self.provider._replace(host=result)
        except socket.gaierror, err:
            print(err)
Пример #4
0
def loopix_providers():
    sec_params = SphinxParams(header_len=1024)

    dbManager.create_providers_table('Providers')
    providers = []
    pubs_providers = []
    for i in range(3):
        p = LoopixProvider(sec_params, 'Provider%d' % (i + 1), 9995 - i,
                           '1.2.%d.4' % i)
        p.transport = proto_helpers.FakeDatagramTransport()
        p.config_params = p.config_params._replace(DATABASE_NAME='test.db')
        providers.append(p)
        dbManager.insert_row_into_table('Providers', [
            None, p.name, p.port, p.host,
            sqlite3.Binary(petlib.pack.encode(p.pubk))
        ])
    pubs_providers = [
        Provider(p.name, p.port, p.host, p.pubk) for p in providers
    ]
    return providers, pubs_providers
 def select_provider_by_name(self, param_val):
     self.cursor.execute("SELECT * FROM Providers WHERE name = ?",
                         [str(param_val)])
     plist = self.cursor.fetchone()
     return Provider(str(plist[1]), plist[2], str(plist[3]),
                     petlib.pack.decode(plist[4]))
Пример #6
0
class LoopixClient(DatagramProtocol):
    jsonReader = JSONReader(os.path.join(os.path.dirname(__file__), 'config.json'))
    config_params = jsonReader.get_client_config_params()
    output_buffer = Queue()
    process_queue = ProcessQueue()
    reactor = reactor
    resolvedAdrs = {}

    def __init__(self, sec_params, name, port, host, provider_id, privk=None, pubk=None):
        self.name = name
        self.port = port
        self.host = host
        self.privk = privk or sec_params.group.G.order().random()
        self.pubk = pubk or (self.privk * sec_params.group.G.generator())
        self.crypto_client = ClientCore((sec_params, self.config_params), self.name,
                                        self.port, self.host, self.privk, self.pubk)
        self.provider = Provider(name=provider_id)


    def startProtocol(self):
        log.msg("[%s] > Started" % self.name)
        self.get_network_info()
        self.get_provider_data()
        self.subscribe_to_provider()
        self.turn_on_packet_processing()
        self.make_loop_stream()
        self.make_drop_stream()
        self.make_real_stream()

    def get_network_info(self):
        self.dbManager = DatabaseManager(self.config_params.DATABASE_NAME)
        self.register_mixes(self.dbManager.select_all_mixnodes())
        self.register_providers(self.dbManager.select_all_providers())
        self.register_friends(self.dbManager.select_all_clients())
        self.provider = self.dbManager.select_provider_by_name(self.provider.name)
        log.msg("[%s] > Registered network information" % self.name)

    def get_provider_data(self):
        self.provider = self.dbManager.select_provider_by_name(self.provider.name)
        d = twisted.names.client.getHostByName(self.provider.host)
        d.addCallback(self.resolve_provider_address)

    def resolve_provider_address(self, result):
        self.provider = self.provider._replace(host = result)

    def subscribe_to_provider(self):
        lc = task.LoopingCall(self.send, ['SUBSCRIBE', self.name, self.host, self.port])
        lc.start(self.config_params.TIME_PULL, now=True)

    def register_mixes(self, mixes):
        self.pubs_mixes = group_layered_topology(mixes)

    def register_providers(self, providers):
        self.pubs_providers = providers

    def register_friends(self, clients):
        self.befriended_clients = clients

    def turn_on_packet_processing(self):
        self.retrieve_messages()
        self.reactor.callLater(20.0, self.get_and_addCallback, self.handle_packet)
        log.msg("[%s] > Turned on retrieving and processing of messages" % self.name)

    def retrieve_messages(self):
        lc = task.LoopingCall(self.send, ['PULL', self.name])
        lc.start(self.config_params.TIME_PULL, now=True)

    def get_and_addCallback(self, function):
        self.process_queue.get().addCallback(function)

    def datagramReceived(self, data, (host, port)):
        self.process_queue.put(data)
Пример #7
0
class LoopixClient(DatagramProtocol):
    jsonReader = JSONReader(
        os.path.join(os.path.dirname(__file__), 'config.json'))
    config_params = jsonReader.get_client_config_params()
    output_buffer = Queue()
    process_queue = ProcessQueue()
    reactor = reactor
    resolvedAdrs = {}
    number_of_chunks = 4  #depends on the quality/size of frame
    buffering = 200  #equals to pull size for simplicity on metrics
    stream_length = 1000000  #to chnage this consider adding more space to the body. 1 space for every digit
    stream_buffer = [[None for x in range(number_of_chunks)]
                     for y in range(stream_length)]  #hashtable for chunks
    chunk_count = [0] * stream_length  #hashtable to know a frame is full
    frames_received = 0
    frames_played = 0
    playing = False
    video_ended = False

    def __init__(self,
                 sec_params,
                 name,
                 port,
                 host,
                 provider_id,
                 privk=None,
                 pubk=None):
        self.name = name
        self.port = port
        self.host = host
        self.privk = privk or sec_params.group.G.order().random()
        self.pubk = pubk or (self.privk * sec_params.group.G.generator())
        self.crypto_client = ClientCore((sec_params, self.config_params),
                                        self.name, self.port, self.host,
                                        self.privk, self.pubk)
        self.provider = Provider(name=provider_id)

    def startProtocol(self):
        log.msg("[%s] > Started" % self.name)
        self.get_network_info()
        self.get_provider_data()
        self.subscribe_to_provider()
        self.turn_on_packet_processing()
        #self.make_loop_stream()
        #self.make_drop_stream()
        self.make_real_stream()
        if self.name != 'Client1':
            self.send_video('../../example3.mp4', self.befriended_clients[0])

    def get_network_info(self):
        self.dbManager = DatabaseManager(self.config_params.DATABASE_NAME)
        self.register_mixes(self.dbManager.select_all_mixnodes())
        self.register_providers(self.dbManager.select_all_providers())
        self.register_friends(self.dbManager.select_all_clients())
        self.provider = self.dbManager.select_provider_by_name(
            self.provider.name)
        log.msg("[%s] > Registered network information" % self.name)

    def get_provider_data(self):
        self.provider = self.dbManager.select_provider_by_name(
            self.provider.name)
        d = twisted.names.client.getHostByName(self.provider.host)
        d.addCallback(self.resolve_provider_address)

    def resolve_provider_address(self, result):
        self.provider = self.provider._replace(host=result)

    def subscribe_to_provider(self):
        lc = task.LoopingCall(self.send,
                              ['SUBSCRIBE', self.name, self.host, self.port])
        lc.start(self.config_params.TIME_PULL, now=True)

    def register_mixes(self, mixes):
        self.pubs_mixes = group_layered_topology(mixes)

    def register_providers(self, providers):
        self.pubs_providers = providers

    def register_friends(self, clients):
        self.befriended_clients = clients

    def turn_on_packet_processing(self):
        self.retrieve_messages()
        self.reactor.callLater(20.0, self.get_and_addCallback,
                               self.handle_packet)
        log.msg("[%s] > Turned on retrieving and processing of messages" %
                self.name)

    def retrieve_messages(self):
        lc = task.LoopingCall(self.send, ['PULL', self.name])
        lc.start(self.config_params.TIME_PULL, now=True)

    def get_and_addCallback(self, function):
        self.process_queue.get().addCallback(function)

    def datagramReceived(self, data, (host, port)):
        self.process_queue.put(data)