HEX
Server: Apache/2.2.34 (Unix) mod_fastcgi/mod_fastcgi-SNAP-0910052141
System: Linux Kou-Etsu-Dou 4.4.59+ #25556 SMP PREEMPT Thu Mar 4 18:03:46 CST 2021 x86_64
User: hosam (1026)
PHP: 7.2.29
Disabled: NONE
Upload Files
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)