File: /volume1/@appstore/MailPlus-Server/scripts/common/c_lib.py
#!/usr/bin/env python3
# -*- encoding=utf8 -*-
# Copyright (c) 2000-2020 Synology Inc. All rights reserved.
import ctypes
import sys
sys.path.append("/var/packages/MailPlus-Server/target/scripts/common/")
from singleton import Singleton
CTYPES_STR_BUFFER_LENGTH = 1024
def _decode_ctypes_string_buffer(buffer):
return buffer.value.decode('utf-8')
class LibMailserver(metaclass=Singleton):
def __init__(self):
self._lib = ctypes.cdll.LoadLibrary('/var/packages/MailPlus-Server/target/lib/libmailserver.so')
def get_readable_byte(self, input_byte):
readable_byte = ctypes.create_string_buffer(CTYPES_STR_BUFFER_LENGTH)
ret = self._lib.GetReadableByte(
ctypes.c_ulonglong(input_byte),
readable_byte, CTYPES_STR_BUFFER_LENGTH
)
if ret != 0:
raise Exception('Failed to GetReadableByte, ret: [{0}]'.format(ret))
return _decode_ctypes_string_buffer(readable_byte)
def get_readable_usage_and_limit_info(self, user):
usage = ctypes.create_string_buffer(CTYPES_STR_BUFFER_LENGTH)
limit = ctypes.create_string_buffer(CTYPES_STR_BUFFER_LENGTH)
ret = self._lib.GetUsageAndLimitInfo(
str.encode(user),
usage, CTYPES_STR_BUFFER_LENGTH,
limit, CTYPES_STR_BUFFER_LENGTH
)
if ret != 0:
raise Exception('Failed to GetUsageAndLimitInfo, ret: [{0}]'.format(ret))
return _decode_ctypes_string_buffer(usage), _decode_ctypes_string_buffer(limit)