def _encode(self, ctxt, input_buf, output_buf, params, count):
		try:
			input_obj = databuffer.DataBuffer(handle = core.BNDuplicateDataBuffer(input_buf))
			param_map = {}
			for i in xrange(0, count):
				data = databuffer.DataBuffer(handle = core.BNDuplicateDataBuffer(params[i].value))
				param_map[params[i].name] = str(data)
			result = self.perform_encode(str(input_obj), param_map)
			if result is None:
				return False
			result = str(result)
			core.BNSetDataBufferContents(output_buf, result, len(result))
			return True
		except:
			log.log_error(traceback.format_exc())
			return False
Example #2
0
 def __setitem__(self, i, value):
     if isinstance(i, slice):
         if i.step is not None:
             raise IndexError("step not supported on assignment")
         i = i.indices(len(self))
         start = i[0]
         stop = i[1]
         if stop < start:
             stop = start
         if len(value) != (stop - start):
             data = str(self)
             data = data[0:start] + value + data[stop:]
             core.BNSetDataBufferContents(self.handle, data, len(data))
         else:
             value = str(value)
             buf = ctypes.create_string_buffer(value)
             ctypes.memmove(
                 core.BNGetDataBufferContentsAt(self.handle, start), buf,
                 len(value))
     elif i < 0:
         if i >= -len(self):
             if len(value) != 1:
                 raise ValueError("expected single byte for assignment")
             value = str(value)
             buf = ctypes.create_string_buffer(value)
             ctypes.memmove(
                 core.BNGetDataBufferContentsAt(self.handle,
                                                int(len(self) + i)), buf, 1)
         else:
             raise IndexError("index out of range")
     elif i < len(self):
         if len(value) != 1:
             raise ValueError("expected single byte for assignment")
         value = str(value)
         buf = ctypes.create_string_buffer(value)
         ctypes.memmove(core.BNGetDataBufferContentsAt(self.handle, int(i)),
                        buf, 1)
     else:
         raise IndexError("index out of range")