Призначення
Функції реалізовані в FServDLL.dll.
Функції розраховані на використання за допомогою інтерпретатора сценаріїв FSHELL.exe.
Вищевказані функції можуть вести протокол своєї роботи, у файл журналу заносяться відомості про дії програми і повідомлення про помилки, що виникають у процесі роботи.
Формат командного рядка запуску сценарію: Fshell.exe <XPacker.bas>
Де XPacker.bas – ім’я файлу сценарію (програма мовою FOSIC);
Файл-сценарій складається мовою FOSIC. Частина файлу–сценарію, яка містить часто вживані підпрограми, складені на мові FOSIC, може бути винесена в файл “fpkapi.fh” або “utils.fh”. Цей файл повинен знаходитися в тому ж каталозі, де “XPacker.bas”.
Функції
_Pack
Формат переданих у функцію параметрів:
_Pack(Mask, OutDir, FMailAdr)
де:
- Mask – використовується при пошуку файлів (файли які не задовольняють заданій масці, упаковуватися не будуть).
- OutDir – папка в якій буде здійснюватися пошук файлів на упаковку.
- FMailAdr – адреса одержувача в форматі X400.
(наприклад: “C:UA/ADMD:EAST_Region/PRMD:KHARKOV/ORG:FOSS/OU:DEPARTMENT/PN:SEM”).
Схема роботи:
Функція _Pack вибирає по масці Mask з каталогу OutDir файли для відправки. Потім з цих файлів формується файл поштової кореспонденції (ФПК) і кладеться в каталог QUEUEDir (який задається функцією _SetXPackerQUEUEDir (QUEUEDir) див. нижче). ФПК з каталогу QUEUEDir відправляються клієнтською програмою TcpFoss по каналу зв’язку.
При формуванні ФПК враховуються наступні обмеження:
1) Розмір ФПК, в kB, менше MaxFilesLen (задається _SetXPackMaxFSize(MaxFilesLen)
2) Кількість файлів в ФПК д.б. не більше MaxFilesNum (задається _SetXPackMaxFNum(MaxFilesNum)
При формуванні конверту ФПК враховуються атрибути ФПК , що задаються функціями: _SetSelfAdr, _SetFPKPriorityLevel, _SetXPackRepType.
Файли, на які запитаний звіт, копіюються також у OutTmpDir, і знаходитимуться там до отримання звіту про доставку (див. _UnPack).
_XPack
Формат переданих у функцію параметрів:
_XPack(Mask, OutDir)
де:
- Mask – використовується при пошуку файлів (файли які не задовольняють заданій масці, упаковуватися не будуть).
- OutDir – папка в якій буде здійснюватися пошук файлів на упаковку.
Схема роботи:
Функція _XPack вибирає по масці Mask з каталогу OutDir файли для відправки. Вони переносяться в каталог UserOutTmp. Потім з цих файлів формується файл поштової кореспонденції (ФПК) і кладеться в каталог QUEUEDir. ФПК з каталогу QUEUEDir забирає маршрутизатор системи FossMail і відправляє їх по каналу зв’язку.
Все в описі функції _Pack відноситься і до _XPack крім наступного:
принципова відмінність у способі формування адреси одержувача і теми ФПК.
Для _Pack адреса одержувача передається в якості параметра.
_XPack формує ці поля конверта по чотирьох символах в імені файлу, обраного по масці Mask з каталогу OutDir.
Формування адреси одержувача відбувається відповідно до інформації з файлу xpacker.dat. (дан як приклад). Якщо сформувати адресу по імені з допомогою xpacker.dat не вдається, такий файл залишається в OutDir.
Тема ФПК формується так: “Від <SelfAdr> до <чотири символи імені>.”. Наприклад, якщо SetSelfAdr(“C:UA/ADMD:EAST_Region/PRMD:KHARKOV/ORG:FOSS/OU:DEPARTMENT/PN:SEM”) і пакується файл UUARUUAL.S32, то тема: “Від SEM до UUAL.”
_UnPack
Формат переданих у функцію параметрів:
_UnPack(FPKDir, FilesDir)
де:
- FPKDir – папка, з якої будуть братися файли на розпакування.
- OutDir – папка, в яку будуть міститися розпаковані файли.
Схема роботи:
Система FossMail доставляє отримані по каналах зв’язку ФПК в поштову скриньку користувача (каталог FPKDir). Функція _UnPack обробляє прислані ФПК і створює по них звіт (звіт запитаний і, якщо ФПК сам не є звітом), а файли викладає в каталоги FilesDir.
Кількість ФПК, оброблених при одному виклику _UnPack д.б. менше MaxFpkNum (задається SetXUnPackNum (MaxFpkNum)). За замовчуванням UnPack завершує роботу після повної обробки FPKDir.
1) Якщо до _UnPacker потрапляє не ФПК, він перекладається в BadDir (задається _SetXPackerBadDir (BadDir));
2) Якщо до _UnPacker потрапляє пошкоджений ФПК, він перекладається в BadDir. При цьому, якщо відома адреса відправника, буде сформований в QUEUEDir звіт з кодом доставки 101:
.RCODE = 101
.ERCODE = 11 — в ФПК не виявлено CRC
або
12 — помилка CRC інформаційної частини
або
13 — помилка CRC конверту
3) Якщо до _UnPacker потрапляє ФПК-звіт, функція перевіряє код доставки. Якщо файли НЕ доставлені, вони з OutTmpDir перекладаються в UnDeliveredDir. Якщо файли доставлені, вони з OutTmpDir перекладаються в DeliveredDir, а якщо він не заданий, видаляються (задається _SetXPackerDeliver_UnDeliverDir (DeliveredDir, UndeliveredDir)).
4) Якщо до _UnPack потрапляє ФПК з файлами, то
- a) ФПК розпаковується в каталог OutDir і видаляється
- b) При розпакуванні в OutDir у файлів з однаковими іменами змінюється розширення або розпакування даного ФПК відкладається (залежно від установок, функція _SetXUnPackRewriteMode(Mode)).
Якщо стався збій при розпакуванні, функція повідомляє про це у файлі журналу і відновлює ситуацію.
Звіт формується після розпакування з кодом доставки 0:
.RCODE = 0
.ERCODE = 0
_UnPackFPK
Формат переданих у функцію параметрів:
_UnPackFPK(fh, FilesDir)
де:
- fh – дескриптор попередньо відкритого і завантаженого конверта (fpk_open(fh), fpk_load_ex(fh) ).
- OutDir – папка, в яку будуть міститися розпаковані файли.
Схема роботи:
Та-ж що і в _UnPack за винятком того, що файли конвертів не видаляються і повинні відкриватися ззовні.
_UnPackCondition
Формат переданих у функцію параметрів:
_UnPackCondition(FPKDir, FilesDir,Condition)
де:
- FPKDir – папка з якої будуть братися файли на розпакування.
- OutDir – папка в яку будуть поміщатися розпаковані файли.
- Condition – рядок що описує умови, за яких відбувається розпакування конверта.
Схема роботи:
Алгоритм роботи – див. _UnPack з однією поправкою – розпакування відбувається тільки при виконанні умови Condition
формат Condition:
<SubCond1><MergerOperator><SubCond2>…<SubCondN>
де:
- <SubCond> – див. нижче
- <MergerOperator> – оператор об’єднання підумов, підтримуються один оператор &
формат SubCond: <KeyField><Operator><Condition>, де:
- <KeyField> – поле конверту
- <Operator> – оператор, підтримується 4 оператора
- == – поле задовольняє умові
- != – поле не задовольняє умові
- =~ – поле задовольняє умові, умова перевіряється без урахування регістру
- !~ – поле не задовольняє умові, умова перевіряється без урахування регістру
- <Condition> – маска вмісту поля, див. _CheckConditioni
Приклад:
_UnPackCondition(“.\Fpk”,”.\In”,”.TH==*@UUIU & .DL==*FMAIL*”)
– розпакувати з каталогу “.\Fpk” в “.\In” всі конверти маскою теми “*@UUIU” і маскою адреси відправника “*FMAIL*”
_CheckCondition
Формат переданих у функцію параметрів:
_CheckCondition (Fh,KeyFld,Condition)
де:
- Fh – дескриптор конверту
- KeyFld – поле конверту на значення якого накладається умова
- Condition – маска умови: ключові символи ‘*’ – все; ‘?’ – будь-який символ
Схема роботи:
Якщо маска накладається на значення поля – функція повертає не 0, інакше – 0
Наприклад: “Це поле конверту“ – “Э?о п*е конв?рт*” – возврат 1
_CheckConditioni
те ж, що і _CheckCondition, але умова перевіряється без урахування регістру літер
_SetXUnPackNum
Формат переданих у функцію параметрів:
_SetXUnPackNum (NumFpk)
де:
- NumFpk – кількість ФПК яке буде розпаковано за один виклик функції
_SetXPackerOutTmpDir
Формат переданих у функцію параметрів:
_SetXPackerOutTmpDir (OutTmpDir)
де:
- OutTmpDir – папка для зберігання ФПК що чекають звіт
- Схема роботи:
Якщо дану функцію не викликати, то в поточній директорії буде створена директорія з ім’ям “OutTmpDir\”
_SetFPKPriorityLevel
Формат переданих у функцію параметрів:
_SetFPKPriorityLevel (PLevel);
де:
- PLevel – рівень пріоритету формованих ФПК
Де:
0 – L (низький)
1 – N (звичайний)
2 – H (високий)
3 – A (абсолютный)
_SetXUnPackBadDir
Формат переданих у функцію параметрів:
_SetXPackerBadDir (BadFpkDir)
де:
- BadFpkDir – папка для ФПК, які функція _UnPack не змогла по якійсь причині обробити
Примітка:
Якщо каталог не заданий, то ці ФПК просто видаляються.
_SetXUnPackRewriteMode
Формат переданих у функцію параметрів:
_SetXUnPackRewriteMode (RMode)
де:
- Rmode – режим розпакування файлів з однаковими іменами:
- 0 – розпакування ФПК що містить однойменні файли відкладається до наступного виклику _UnPack
- 1 – в розпаковуваному однойменному файлі змінюється розширення
наприклад: read.me => read.000 (read.001,read.002 и т.д.).
За замовчуванням Rmode = 0;
_SetXUnPackMode
Формат переданих у функцію параметрів:
_SetXUnPackMode (Mode)
де:
- Mode – режим розпакування файлів з довгими іменами:
- 0 & Mode – розпакування файлу з коротким ім’ям
- 1 & Mode – розпакування файлу з довгим ім’ям
- Примітка:
За замовчуванням Mode = 0;
_SetXPackerDeliver_UnDeliverDir
Формат переданих у функцію параметрів:
_SetXPackerDeliver_UnDeliverDir (DeliveredFpkDir, UnDeliveredFpkDir)
де:
- DeliveredFpkDir – папка в яку будуть поміщатися ФПК, на які прийшов звіт про доставку.
- UnDeliveredFpkDir – папка в яку будуть поміщатися ФПК, на які прийшов звіт з кодом помилки.
- Примітка:
Якщо дані папки не проініціалізовані – дана категорія ФПК знищується.
_SetXPackerQUEUEDir
Формат переданих у функцію параметрів:
_SetXPackerQUEUEDir (QUEUEDir)
де:
- QUEUEDir – вхідний каталог маршрутизатора FossMail
_SetXPackMaxFSize
Формат переданих у функцію параметрів:
_SetXPackMaxFSize (MaxFileLen)
де:
- MaxFileLen – сумарна довжина файлів (в kB) в ФПК, по досягненню якої, файли що залишилися упаковуються в наступний ФПК.
- Примітка:
За замовчуванням – без обмежень.
Розмір задається в кілобайтах.
_SetXPackMaxFNum
Формат переданих у функцію параметрів:
_SetXPackMaxFNum (MaxFileNum)
де:
- MaxFileNum – сумарна кількість файлів в ФПК, по досягненню якого, файли, що залишилися, упаковуються в наступний ФПК.
За замовчуванням – без обмежень.
_SetXPackLogLevel
Формат переданих у функцію параметрів:
_SetXPackLogLevel (LogLevel)
де:
- LogLevel – ступінь звітності (0 – мінімальна)
За замовчуванням – LogLevel = 0;
_SetXPackRepType
Формат переданих у функцію параметрів:
_SetXPackRepType (RepType)
де:
- RepType – тип запитуваного звіту для ФПК, що формуються.
- 0 – звіт не вимагається
- 1 – звіт від маршрутизатора (тобто про доставку)
- 2 – звіт від програми розпакування (тобто про прочитання)
- 3 – звіт від маршрутизатора і програми розпакування
За замовчуванням RepType = 2
_LoadXPackerDat
Формат переданих у функцію параметрів:
_LoadXPackerDat (FileNeme)
де:
- FileNeme – ім’я файлу що містить інформацію по перетворенню NBU => X400
- Примітка:
За замовчуванням проводиться спроба підняти файл Xpacker.dat в поточній директорії.
_SetXPackLogDir
- Формат переданих у функцію параметрів:
_SetXPackLogDir (LogDir)
де:
- LogDir – папка в якій буде вестися лог-файл
Ім’я лог-файлу формується за наступним принципом YYMMDDXp
Де
- YY – рік
- MM – місяць
- DD – день
За замовчуванням – лог-файл не ведеться.
_XCheckBreakSignal(int * lpiSignal)
де:
- lpiSignal – код отриманого сигналу. NULL – не повертати код сигналу.
- Значення, що повертається:
TRUE (не 0) – отримано сигнал на переривання виконання програми.
FALSE (0) – сигнал на переривання виконання програми не приходив.
При виконанні в консольному вікні перехоплюються такі сигнали:
- CTRL_C_EVENT
- CTRL_BREAK_EVENT
- CTRL_CLOSE_EVENT
- CTRL_LOGOFF_EVENT
- CTRL_SHUTDOWN_EVENT
Код сигналу повертається в параметрі lpiSignal якщо функція повернула код TRUE.
_SetSelfAdr
Формат переданих у функцію параметрів:
_SetSelfAdr (DL)
де:
- DL – адреса відправника для ФПК, що формуються
_XPackAdd
Формат переданих у функцію параметрів:
_XPackAdd (Key, Value)
де:
- Key – ключ
- Value – значення.
Додає довільне поле в конверт.
Очищається після кожного виклику _XPack і _Pack.
Формат файлу журналу
—— [ START XPACKER FpkAPI(v 4.0.10.0) 29/05/2015 14:54:26] —————- | Запис про запуск програми: Тут вказана версія і поточні дата-час. |
—[ Packed ]———————————-[ 29/05/2015 14:54:26 ]- FPK : G~20150529145426AASRGBWWWGIWGUG 1024 29/05/2015 14:54:26 TYPE: Message FROM: C:UA/ADMD:FMAIL/PRMD:KHARKOV/ORG:FOSS/OU:ПОД-ФИРМА/PN:USER1 TO : C:UA/ADMD:FMAIL/PRMD:KHARKOV/ORG:FOSS/OU:ПОД-ФИРМА/PN:USER2 RT : 3 “deliver & read” Subj: Speed test File: “&&_0.txt” 130 22/05/2015 16:20:26 FPK Name:”N309587.fpk” |
Запис про упаковку ФПК |
—[ Unpacked ]———————————-[ 29/05/2015 14:55:28 ]- FPK : G~20150529145426A0SRGBWWWGIWGUG 1059 29/05/2015 14:54:26 TYPE: Message FROM: C:UA/ADMD:FMAIL/PRMD:KHARKOV/ORG:FOSS/OU:ПОД-ФИРМА/PN:USER1 TO : C:UA/ADMD:FMAIL/PRMD:KHARKOV/ORG:FOSS/OU:ПОД-ФИРМА/PN:USER2 RT : 3 “deliver & read” Subj: Speed test File: “&&_1002.txt” 133 22/05/2015 16:20:28 “In\&&_1002.txt” FPK Name:”G~20150529145426A0SRGBWWWGIWGUGMN_N3094B7.FPK” |
Запис про розпакування ФПК |
—[ Unpacked ]———————————-[ 29/05/2015 14:55:28 ]- FPK : G~20150529145426A1SRGBWWWGIWGUG 0 29/05/2015 14:54:42 TYPE: Report CODE: 0 “delivered” C:UA/ADMD:FMAIL/PRMD:KHARKOV/ORG:FOSS/OU:ПОД-ФИРМА/PN:USER2 29/05/2015 14:54:42 FROM: HOST:FM_TEST TO : C:UA/ADMD:FMAIL/PRMD:KHARKOV/ORG:FOSS/OU:ПОД-ФИРМА/PN:USER1 RT : 1 “deliver” Subj: Speed test FPK Name:”G~20150529145426A1SRGBWWWGIWGUGRR_12m9cOK.rep” |
Запись про розпакування звіту |
—— [ STOP 29/05/2015 15:25:36 ] ——————————— | Запис про зупинку програми |
Формат запису про помилки у файлі журналу
Повідомлення про помилкову ситуацію завжди (що полегшує пошук у файлі) починається зі знака ‘===>’, потім йде текст повідомлення.
ERROR ==> Received bad FPK – File.doc
ERROR ==> Code -2
Код | Значення кода |
При упаковці | |
1 | Файл з ім’ям ФПК вже є |
2 | Не вдалося створити файл архіву |
3 | Помилка запису в архів |
4 | Помилка при відкриванні пакуємого файлу |
5 | Помилка читання пакуємого файлу |
6 | Помилка виділення пам’яті |
14 | Помилка SHARE-open! Файл архіву відкритий іншою програмою |
15 | Помилка SHARE-open! Файл, що пакується, відкритий іншою програмою |
16 | Занадто багато відкритих файлів |
20 | Помилка LSEEK |
При розпакуванні | |
1 | Не знайдено ФПК |
2 | Збій читання ФПК |
3 | Збій при створенні файлу, що розпаковується |
4 | Помилка запису файлу |
5 | Каталог не знайдено |
6 | Недостатньо пам’яті для буфера |
7 | Невідома структура архіву (помилкова сигнатура) |
11 | У ФПК не виявлено CRC |
12 | Помилка CRC інформаційної частини |
13 | Помилка CRC конверту |
14 | Помилка SHARE-open! Файл архіву відкритий інший програмою |
15 | Помилка SHARE-open! Файл, що пакується, відкритий іншою програмою |
16 | Занадто багато відкритих файлів |
17 | Розпакування перервано: помилка при конфлікті імен (при формуванні імені в каталог попереднього рівня) |
20 | Помилка LSEEK |
30 | Розпакування перервано |
При копіюванні | |
1 | Помилка Open Src-файлу |
2 | Помилка Open Dest-файлу |
3 | Помилка запису Dest-файлу |
4 | Помилка при відкриванні пакуємого файлу |
5 | Помилка читання Src-файлу |
6 | Помилка виділення пам’яті |
14 | Помилка SHARE-open! Src-файл відкритий іншою програмою |
15 | Помилка SHARE-open! Dest-файл відкритий іншою програмою |
16 | Занадто багато відкритих файлів |
20 | Помилка LSEEK |
При завантаженні файлу XPACKER.DAT | |
1 | Немає файлу |
2 | Недостатньо ОЗУ |
3 | Помилка в форматі Xpacker.Dat |