def onInactivityTimeout(self):
        """
		"""
        tpl = TestTemplatesLib.TemplateMessage()
        tpl.addLayer(layer=AdapterIP.ip(more=AdapterIP.received()))
        tpl.addLayer(layer=templates.udp(more=templates.received()))
        self.onInactivity(lower=tpl)
Exemple #2
0
    def hasClientData(self,
                      timeout=1.0,
                      clientId=None,
                      data=None,
                      versionIp=None,
                      sourceIp=None,
                      destinationIp=None,
                      sourcePort=None,
                      destinationPort=None):
        """
		Waits to receive "data" event until the end of the timeout
		
		@param timeout: time max to wait to receive event in second (default=1s)
		@type timeout: float	

		@param data: data expected
		@type data:	string/operators	
	
		@param versionIp: version ip expected
		@type versionIp: string/operators/none	

		@param sourceIp: source ip expected
		@type sourceIp:	string/operators/none	
		
		@param destinationIp: destination ip expected
		@type destinationIp: string/operators/none	
		
		@param sourcePort: source port expected
		@type sourcePort:	string/operators/none
		
		@param destinationPort: destination port expected
		@type destinationPort: string/operators/none	

		@return: an event matching with the template or None otherwise
		@rtype: templatemessage
		"""
        TestAdapterLib.check_timeout(caller=TestAdapterLib.caller(),
                                     timeout=timeout)

        # construct the expected template
        tpl = templates.received(data=data, id=clientId)
        expected = self.getExpectedTemplate(tpl=tpl,
                                            versionIp=versionIp,
                                            sourceIp=sourceIp,
                                            destinationIp=destinationIp,
                                            sourcePort=sourcePort,
                                            destinationPort=destinationPort)

        # try to match the template
        evt = self.received(expected=expected, timeout=timeout)
        return evt
	def onIncomingData(self, data=None, fromAddr=None):
		"""
		"""
		try:
			ip, port = fromAddr
			# separator feature is disabled
			if data is not None: 
				# log event
				data_size = len(data)
				if self.logEventReceived:
					tpl = self.encapsule( ip_event=AdapterIP.received(), udp_event=templates.received(data=data, data_length=str(data_size)), src_ip=ip, src_port=port )
				else:
					tpl = self.encapsule( ip_event=AdapterIP.received(), udp_event=templates.received(data_length=str(data_size)), src_ip=ip, src_port=port )
				if self.logEventReceived:
					tpl.addRaw(raw=data)
					self.logRecvEvent( shortEvt = "data", tplEvt = tpl )
				
				# handle data
				self.handleIncomingData( data, lower=tpl )
			# separator feature is enabled, split the buffer by the separator
			else: 
				datas = self.buf[fromAddr].split(self.cfg['sep-in'])
				for data in datas[:-1]:
					pdu = data+self.cfg['sep-in']
					# log event
					pdu_size = len(data)
					if self.logEventReceived:
						tpl = self.encapsule( ip_event=AdapterIP.received(), udp_event=templates.received( data=pdu, data_length=str(pdu_size) ), src_ip=ip, src_port=port )
					else:
						tpl = self.encapsule( ip_event=AdapterIP.received(), udp_event=templates.received( data_length=str(pdu_size) ), src_ip=ip, src_port=port )
					if self.logEventReceived:
						tpl.addRaw(raw=pdu)
						self.logRecvEvent( shortEvt = "data reassembled", tplEvt = tpl )
					# handle data
					self.handleIncomingData( pdu, lower=tpl)
				self.buf[fromAddr] = datas[-1]
		except Exception as e:
			self.error( str(e) )
	def onInactivityTimeout(self):
		"""
		"""
		tpl = self.encapsule( ip_event=AdapterIP.received(), udp_event=templates.received(), 
						src_ip=self.cfg['dst-ip'], src_port=self.cfg['dst-port'] )
		self.onInactivity(lower=tpl)
    def onReceiving(self, data, fromAddr, toAddr, lower):
        """
		Function to overwrite
		Called on incoming data

		@param data: data received
		@type data: string
		
		@param lower: template data received
		@type lower: templatemessage
		"""
        # extract transport info
        self.lastActivity = time.time()
        srcIp, srcPort = fromAddr
        dstIp, dstPort = toAddr

        # the separator feature is disabled, to nothing
        if self.cfg['sep-disabled']:
            try:
                self.handleIncomingData(data=data, lower=lower)
            except Exception as e:
                self.error(
                    "on handle incoming udp data, upper layer problem: %s" %
                    str(e))
        else:
            # bufferize data
            if self.buf.has_key(fromAddr):
                self.buf[fromAddr] = ''.join([self.buf[fromAddr], data])
            else:
                self.buf[fromAddr] = data

            # split data with the separator
            datas = self.buf[fromAddr].split(self.cfg['sep-in'])
            for d in datas[:-1]:
                udp_data = d + self.cfg['sep-in']
                udp_data_size = len(udp_data)

                # construct high template and log it
                tpl = TestTemplatesLib.TemplateMessage()
                tpl.addLayer(
                    layer=AdapterIP.ip(source=srcIp,
                                       destination=dstIp,
                                       more=AdapterIP.received(),
                                       version=self.cfg['ip-version']))
                if self.logEventReceived:
                    udp_layer = templates.udp(
                        source=srcPort,
                        destination=dstPort,
                        more=templates.received(
                            data=udp_data, data_length=str(udp_data_size)))
                else:
                    udp_layer = templates.udp(
                        source=srcPort,
                        destination=dstPort,
                        more=templates.received(
                            data_length=str(udp_data_size)))
                tpl.addLayer(layer=udp_layer)

                if self.logEventReceived:
                    tpl.addRaw(raw=udp_data)
                    self.logRecvEvent(shortEvt='data reassembled', tplEvt=tpl)

                # handle data
                self.handleIncomingData(udp_data, lower=tpl)
            self.buf[fromAddr] = datas[-1]
Exemple #6
0
    def onClientIncomingData(self, clientAddress, data=None):
        """
		"""

        try:
            ip, port = clientAddress
            id = self.clients[clientAddress]['id']
            # separator feature is disabled
            if data is not None:
                # log event
                data_size = len(data)
                if self.logEventReceived:
                    tpl = self.encapsule(ip_event=AdapterIP.received(),
                                         udp_event=templates.received(
                                             data=data,
                                             data_length=str(data_size),
                                             id=id),
                                         src_ip=ip,
                                         src_port=port)
                else:
                    tpl = self.encapsule(ip_event=AdapterIP.received(),
                                         udp_event=templates.received(
                                             data_length=str(data_size),
                                             id=id),
                                         src_ip=ip,
                                         src_port=port)
                if self.logEventReceived:
                    tpl.addRaw(raw=data)
                    self.logRecvEvent(shortEvt="client #%s data" %
                                      self.clients[clientAddress]['id'],
                                      tplEvt=tpl)

                # handle data
                self.handleIncomingData(clientAddress=clientAddress,
                                        data=data,
                                        lower=tpl)
            # separator feature is enabled, split the buffer by the separator
            else:
                datas = self.clients[clientAddress]['buffer'].split(
                    self.cfg['sep-in'])
                for data in datas[:-1]:
                    pdu = data + self.cfg['sep-in']
                    # log event
                    pdu_size = len(data)
                    if self.logEventReceived:
                        tpl = self.encapsule(ip_event=AdapterIP.received(),
                                             udp_event=templates.received(
                                                 data=pdu,
                                                 data_length=str(pdu_size),
                                                 id=id),
                                             src_ip=ip,
                                             src_port=port)
                    else:
                        tpl = self.encapsule(ip_event=AdapterIP.received(),
                                             udp_event=templates.received(
                                                 data_length=str(pdu_size),
                                                 id=id),
                                             src_ip=ip,
                                             src_port=port)
                    if self.logEventReceived:
                        tpl.addRaw(raw=pdu)
                        self.logRecvEvent(
                            shortEvt="client #%s data reassembled" % id,
                            tplEvt=tpl)
                    # handle data
                    self.handleIncomingData(clientAddress=clientAddress,
                                            data=pdu,
                                            lower=tpl)
                self.clients[clientAddress]['buffer'] = datas[-1]
        except Exception as e:
            self.error(str(e))