এরর কোড
এগুলো DAT-এ আনুষ্ঠানিকভাবে সমর্থিত সার্ভিস লাইব্রেরিগুলোর সাধারণ এরর কোড।
প্রতিটি কোডের সঙ্গে প্রভাব ও পুনঃচেষ্টা দুটি মান থাকে, আর কিছু কোডে বাড়তি সন্দেহ ট্যাগও যুক্ত হয়।
প্রভাব — সার্ভিসের কতটা ক্ষতি
এটাই অ্যালার্ট বসানোর মানদণ্ড। কেবল একটাই দেখা হয়: "এই মুহূর্তে কি সার্ভিস থেমে গেছে?"
| প্রভাব | অর্থ | উদাহরণ |
|---|---|---|
| গুরুতর | সার্ভিস বা কোনো নির্দিষ্ট কার্যক্রম থেমে যায়। ইস্যু করা অসম্ভব, সিঙ্কের স্থায়ী ব্যর্থতা, ইনিশিয়ালাইজেশন ব্যর্থতা | ইস্যু করা সার্ভারে ব্যবহারযোগ্য একটিও সার্টিফিকেট নেই |
| আংশিক | কিছু অনুরোধ বা চক্র ব্যর্থ হয় কিন্তু সার্ভিস চলতে থাকে। সাধারণত নিজে থেকেই সেরে ওঠে | CMS-এর এক চক্র ব্যর্থ। বিদ্যমান সার্টিফিকেট দিয়ে কাজ চলতে থাকে |
| প্রভাব নেই | একটি অনুরোধ প্রত্যাখ্যান করলেই শেষ | কারসাজি করা টোকেন এসেছে। ছেঁকে ফেলে দিলেই হলো |
প্রভাব নেই অ্যালার্টের লক্ষ্য নয়। একবার ভুল ইনপুট এসেছে বলে যদি সব দায়িত্বপ্রাপ্তকে দেখতে হয়, তাহলে অ্যালার্ট অর্থহীন হয়ে পড়ে।
সন্দেহ — চলতে থাকলে তদন্ত
সন্দেহ ট্যাগ লাগানো কোডগুলো একবার এলে স্বাভাবিক পরিচালনারই অংশ। ক্লায়েন্ট যেকোনো সময় ভুল মান পাঠাতে পারে, আর সেটা ছেঁকে ফেলাই লাইব্রেরির কাজ।
তবে এই এররগুলো যদি ধারাবাহিকভাবে, কিংবা নির্দিষ্ট উৎস থেকে ঝাঁক বেঁধে আসে, তাহলে দুটোর একটা।
- কনফিগারেশনের গোলমাল — ডিপ্লয়মেন্ট ভুল হয়েছে, পুরোনো সংস্করণের ক্লায়েন্ট রয়ে গেছে, কিংবা সার্টিফিকেট মিলছে না।
- হ্যাকিংয়ের চেষ্টা — টোকেন বা কী কারসাজি করে যাচাই পার করার চেষ্টা, অথবা বৈধ মান খুঁজে বের করার অনুসন্ধান।
তাই এই কোডগুলোর ক্ষেত্রে সংখ্যাকে মেট্রিক হিসেবে রাখাই ঠিক। কেবল থ্রেশহোল্ড ছাড়ালে জানালেই যথেষ্ট।
পুনঃচেষ্টা
| পুনঃচেষ্টা | অর্থ |
|---|---|
| সাময়িক | ব্যাকঅফের পর আবার চেষ্টা করলে মিটে যায় |
| স্থায়ী | পুনঃচেষ্টা নিষেধ। কনফিগারেশন বা ইনপুট ঠিক করতে হবে |
| অবস্থা | এটি এরর নয়, একটি সংকেত |
টোকেন
প্রাপ্ত টোকেন স্ট্রিংয়েরই সমস্যা।
DAT_TOKEN_MALFORMED বিন্দু দিয়ে আলাদা করা অংশ পাঁচটি নয়, বা expire বিশুদ্ধ দশমিক সংখ্যা নয়, বা cid বিশুদ্ধ ষোলোভিত্তিক নয়, বা plain·secure base64url নয়, অথবা কোনো সংখ্যাসূচক ফিল্ড পূর্ণসংখ্যার সীমা ছাড়িয়ে গেছে।
arrow_forwardঅনুরোধ প্রত্যাখ্যান
DAT_TOKEN_EXPIREDexpire <= now। ঠিক সেই মুহূর্তটিও মেয়াদোত্তীর্ণ — অর্থাৎ expire == now হলে ইতিমধ্যেই মেয়াদ শেষ ধরা হয়।
arrow_forwardটোকেন পুনরায় ইস্যুতে উৎসাহ
DAT_TOKEN_UNKNOWNউপরের কোনো শ্রেণিতে পড়ে না এমন টোকেন এরর।
arrow_forwardলগ দেখুন
মেয়াদোত্তীর্ণ আর ফরম্যাট এরর অবশ্যই আলাদা
প্রতিক্রিয়া একেবারে বিপরীত — মেয়াদোত্তীর্ণ হওয়া আয়ুর স্বাভাবিক সমাপ্তি, তাই টোকেন নবায়ন করালেই চলে; আর ফরম্যাট এরর মানে টোকেনটা আসলে ইস্যুই করা হয়নি, তাই প্রত্যাখ্যান করতে হবে।
পার্সিং আগে গঠন নিশ্চিত করে, তারপর মান দেখে। "1.2.3"-এর মতো অংশ কম থাকা স্ট্রিং মেয়াদোত্তীর্ণ টোকেন নয়, বরং আদৌ টোকেনই নয় — তাই এটি DAT_TOKEN_MALFORMED।
expire ফিল্ডে +100-এর মতো চিহ্ন থাকলেও সেটা মেয়াদ নয়, ফরম্যাট এরর। কেবল বিশুদ্ধ ASCII অঙ্কই গ্রহণযোগ্য।
সার্টিফিকেট
সার্টিফিকেট স্ট্রিংয়ের ফরম্যাট, এবং সেই সার্টিফিকেট এই মুহূর্তে ব্যবহার করা যাবে কি না — তার সমস্যা।
DAT_CERT_MALFORMED বিন্দু দিয়ে আলাদা করা অংশ আটটি নয়, বা cid·start·duration·ttl পার্স করা যায়নি, বা কী ফিল্ড base64url নয়, অথবা start + duration + ttl u64-এর সীমা ছাড়িয়ে গেছে।
arrow_forwardসার্টিফিকেট পুনরায় বিতরণ
DAT_CERT_EXPIREDstart + duration + ttl < now। সম্পূর্ণ মেয়াদোত্তীর্ণ অবস্থা, যেখানে ইস্যু বা যাচাই কোনোটিই সম্ভব নয়।
arrow_forwardসার্টিফিকেট নবায়ন
DAT_CERT_NOT_YET_ISSUABLEnow < start। ইস্যুর জানালা এখনো খোলেনি।
arrow_forwardঅপেক্ষা
DAT_CERT_ISSUANCE_ENDEDnow > start + duration কিন্তু ttl এখনো বাকি। ইস্যু করা যায় না, কেবল যাচাই সম্ভব।
arrow_forwardনতুন সার্টিফিকেট বিতরণ
DAT_CERT_VERIFY_ONLYস্বাক্ষরের প্রাইভেট কী ছাড়া কেবল পাবলিক কী ধারণ করা সার্টিফিকেট। যাচাই হয়, কিন্তু ইস্যু করা অসম্ভব।
arrow_forwardবিতরণ সেটিং দেখুন
DAT_CERT_NOT_FOUND টোকেনের cid-এর সঙ্গে মিল থাকা কোনো সার্টিফিকেট নেই। হয় জাল টোকেন, নয়তো ভুল বিতরণ।
arrow_forwardঅনুরোধ প্রত্যাখ্যান
DAT_CERT_NOT_SYNCED সেই cid এখনো CMS থেকে পাওয়া যায়নি। নতুন সার্টিফিকেট বিতরণের ঠিক পরে অল্প সময়ের জন্য ঘটে।
arrow_forwardসিঙ্কের পর পুনঃচেষ্টা
DAT_CERT_DUPLICATE_CID import করা তালিকার ভেতরে একই cid দুইবার বা তার বেশি আছে।
arrow_forwardসার্ভারের উত্তর দেখুন
DAT_CERT_UNKNOWNউপরের কোনো শ্রেণিতে পড়ে না এমন সার্টিফিকেট এরর।
arrow_forwardলগ দেখুন
DAT_CERT_NOT_FOUND আর DAT_CERT_NOT_SYNCED-এর বাহ্যিক উপসর্গ এক হলেও প্রতিক্রিয়া আলাদা। প্রথমটি এমন cid যা কখনো ইস্যুই করা হয়নি, তাই অপেক্ষা করে লাভ নেই; দ্বিতীয়টি সিঙ্ক হলেই মিটে যায়।
DAT_CERT_NOT_FOUND একবার এলে কেবল ছেঁকে ফেললেই হয়, কিন্তু হঠাৎ বেড়ে গেলে বুঝতে হবে বিতরণ এলোমেলো হয়েছে বা জাল টোকেন ঘুরে বেড়াচ্ছে।
স্বাক্ষর
DAT_SIG_MISMATCHস্বাক্ষর যাচাই অমিল হয়ে শেষ হয়েছে। HMAC মান ভিন্ন, অথবা ECDSA verify false দিয়েছে।
arrow_forwardসেশন বন্ধ, নিরাপত্তা লগ
DAT_SIG_MALFORMED স্বাক্ষরের অংশ ফাঁকা, বা base64url নয়, বা ECDSA-র r‖s দৈর্ঘ্য বক্ররেখার সঙ্গে মেলে না, অথবা DER রূপান্তর ব্যর্থ হয়েছে।
arrow_forwardঅনুরোধ প্রত্যাখ্যান
DAT_SIG_KEY_MISSINGverify-only কী দিয়ে স্বাক্ষরের চেষ্টা হয়েছে। অর্থাৎ রানটাইমে প্রাইভেট কী নেই।
arrow_forwardইস্যু সার্ভারের সেটিং দেখুন
DAT_SIG_BACKENDস্বাক্ষর বা যাচাইয়ের ক্রিয়াটিই চালানো যায়নি। ভুল কী-এর ধরন, মুক্ত করে দেওয়া হ্যান্ডল, কিংবা ক্রিপ্টো লাইব্রেরির অভ্যন্তরীণ ত্রুটি।
arrow_forwardকী-এর ধরন ও লাইব্রেরি দেখুন
DAT_SIG_UNKNOWNউপরের কোনো শ্রেণিতে পড়ে না এমন স্বাক্ষর এরর।
arrow_forwardলগ দেখুন
অমিল আর ব্যাকএন্ড ব্যর্থতা গুলিয়ে ফেলবেন না
দুটি কোডের অক্ষ একেবারে বিপরীত।
DAT_SIG_MISMATCH— আসা স্বাক্ষরটা কেবল মেলেনি, তাই সার্ভিসে কোনো প্রভাব নেই; বরং চলতে থাকলে সন্দেহ-এর বিষয় হয়ে ওঠে।DAT_SIG_BACKEND— যাচাইয়ের ক্রিয়াটাই চলেনি, তাই এটি লাইব্রেরির দিকের সমস্যা, সন্দেহের বিষয় নয়।
ভুল কী-এর ধরন বা লাইব্রেরির বাগকে "স্বাক্ষরের অমিল" বলে রিপোর্ট করলে, আসলে কোড নষ্ট হওয়ার ঘটনাটাই আক্রমণের সূচকে মিশে যায়। উল্টোদিকে সত্যিকারের জালিয়াতি ব্যাকএন্ড এরর হিসেবে শ্রেণিবদ্ধ হলে সন্দেহের সূচক থেকে পুরোপুরি বাদ পড়ে যায়।
এনক্রিপশন
secure পেলোডের এনক্রিপশন ও ডিক্রিপশনের সমস্যা।
DAT_CRYPTO_TAG_MISMATCHAES-GCM প্রমাণীকরণ ট্যাগ মিলছে না। হয় secure-এ কারসাজি হয়েছে, নয়তো সার্টিফিকেটের কী ভিন্ন।
arrow_forwardসেশন বন্ধ, নিরাপত্তা লগ
DAT_CRYPTO_DATA_INVALID সাইফারটেক্সট ফাঁকা নয় অথচ IV (12 বাইট)-এর সমান বা তার চেয়ে ছোট, অথবা ইনপুট বাস্তবায়নের সীমা (INT_MAX ইত্যাদি) ছাড়িয়ে গেছে।
arrow_forwardঅনুরোধ প্রত্যাখ্যান
DAT_CRYPTO_BACKENDএনক্রিপশন বা ডিক্রিপশনের ক্রিয়া চালানো যায়নি। GCM সমর্থন না করা প্ল্যাটফর্ম, কিংবা কনটেক্সট ইনিশিয়ালাইজেশন ব্যর্থতা।
arrow_forwardপ্ল্যাটফর্ম সাপোর্ট দেখুন
DAT_CRYPTO_UNKNOWNউপরের কোনো শ্রেণিতে পড়ে না এমন এনক্রিপশন/ডিক্রিপশন এরর।
arrow_forwardলগ দেখুন
ফাঁকা secure পেলোড এরর নয়। ফাঁকা ইনপুট ফাঁকা আউটপুট হয় এবং কোনো কোডই দেয় না।
স্বাক্ষর যাচাই এড়িয়ে যাওয়া পথে GCM ট্যাগই একমাত্র অখণ্ডতা পরীক্ষা। সে কারণেই DAT_CRYPTO_TAG_MISMATCH-কে অন্যান্য ডিক্রিপশন ব্যর্থতার সঙ্গে একই কোডে বাঁধা হয় না।
কী ম্যাটেরিয়াল
DAT_KEY_INVALID ঘোষিত অ্যালগরিদম ও কী-এর দৈর্ঘ্যের অমিল (HMAC 32/48/64, AES 16/32), বা বক্ররেখার বাইরের বিন্দু, বা d ∉ [1,n-1], বা অসংকুচিত (0x04) ফরম্যাট না হওয়া, অথবা প্রাইভেট ও পাবলিক কী পরস্পরের জোড়া না হওয়া।
arrow_forwardকী প্রতিস্থাপন
DAT_KEY_VERIFY_ONLY_UNSUPPORTEDHMAC পরিবার থেকে verify-only এক্সপোর্টের অনুরোধ করা হয়েছে।
arrow_forwardঅ্যালগরিদম পরিবর্তন
DAT_KEY_UNKNOWNউপরের কোনো শ্রেণিতে পড়ে না এমন কী এরর।
arrow_forwardলগ দেখুন
দেখতে একরকম কিন্তু আলাদা তিনটি:
| কোড | অর্থ |
|---|---|
DAT_KEY_VERIFY_ONLY_UNSUPPORTED | অ্যালগরিদমের কাঠামোগত সীমা। HMAC প্রতিসম কী, তাই এতে পাবলিক কী-এর ধারণাই নেই |
DAT_SIG_KEY_MISSING | রানটাইম অবস্থা। এই মুহূর্তে এই কী-তে প্রাইভেট কী নেই |
DAT_CERT_VERIFY_ONLY | বিতরণের রূপ। এই সার্টিফিকেটটি কেবল যাচাইয়ের জন্য বিতরণ করা হয়েছে |
ম্যানেজার
সার্টিফিকেট ধরে রাখা এবং ইস্যু ও যাচাইয়ে ব্যবহৃত অবজেক্টের অবস্থা।
DAT_MANAGER_NO_CERTIFICATEএকটিও সার্টিফিকেট নেই। হয় import-এর আগে, নয়তো CMS-এর প্রথম সিঙ্ক ব্যর্থ হয়েছে।
arrow_forwardCMS সংযোগ দেখুন
DAT_MANAGER_NO_ISSUABLE_CERTIFICATEসার্টিফিকেট আছে, কিন্তু এই মুহূর্তে ইস্যুতে ব্যবহারযোগ্য কোনোটি নেই। কারণ সঙ্গে পাঠানো হয়।
arrow_forwardকারণ (cause) দেখে সিদ্ধান্ত — নিচের টেবিল
DAT_MANAGER_DISPOSEDইতিমধ্যে মুক্ত করে দেওয়া ম্যানেজার বা সার্টিফিকেট ব্যবহার করা হয়েছে।
arrow_forwardকলিং কোড সংশোধন
DAT_MANAGER_UNKNOWNউপরের কোনো শ্রেণিতে পড়ে না এমন ম্যানেজার এরর।
arrow_forwardলগ দেখুন
DAT_MANAGER_NO_ISSUABLE_CERTIFICATE-এর কারণ (cause) চারটির একটি। কারণভেদে করণীয় সম্পূর্ণ আলাদা।
| কারণ | অর্থ | পুনঃচেষ্টা | প্রতিক্রিয়া |
|---|---|---|---|
DAT_CERT_NOT_YET_ISSUABLE | ইস্যুর জানালা শুরুর আগে | সাময়িক | অপেক্ষা করলেই মিটে যায় |
DAT_CERT_ISSUANCE_ENDED | ইস্যুর জানালা শেষ, কেবল যাচাই সম্ভব | স্থায়ী | নতুন সার্টিফিকেট বিতরণ করতে হবে |
DAT_CERT_EXPIRED | সংরক্ষিত সবগুলোই মেয়াদোত্তীর্ণ | স্থায়ী | সার্টিফিকেট নবায়ন প্রয়োজন |
DAT_CERT_VERIFY_ONLY | সংরক্ষিত সবগুলোই কেবল যাচাইয়ের | স্থায়ী | বিতরণ সেটিংয়ের ভুল |
ইস্যু করা সার্ভার যদি কেবল যাচাইয়ের সার্টিফিকেট নিতে সেট করা থাকে, তাহলে DAT_CERT_VERIFY_ONLY আসে। অপেক্ষা করে এটি কখনোই মেটে না, তাই পুনঃচেষ্টার লক্ষ্য নয়।
কনফিগারেশন
কলার যে মান দিয়েছে তার সমস্যা। CONFIG পরিবারের সবগুলোই কোড সংশোধন করতে হয় এমন এরর, আর পরিচালনার সময় দেখা দিলে বুঝতে হবে ডিপ্লয়মেন্ট ভুল হয়েছে।
DAT_CONFIG_ALG_UNSUPPORTED অজানা অ্যালগরিদমের নাম। ওয়্যার নোটেশনের (ECDSA-P256, IV-AES256-GCM) সঙ্গে হুবহু মিলতে হবে।
arrow_forwardঅ্যালগরিদমের নাম দেখুন
DAT_CONFIG_ARGUMENT_INVALID আবশ্যক আর্গুমেন্ট null, বা অনুমোদিত সীমার বাইরে (ঋণাত্মক সময়ের মান, interval <= 0), বা অসমর্থিত ধরন (ডায়নামিক টাইপের ভাষায় payload-এ সংখ্যা বা বুলিয়ান দেওয়া), অথবা স্বাক্ষরের লক্ষ্য body ফাঁকা।
arrow_forwardকলিং কোড সংশোধন
DAT_CONFIG_URI_INVALIDCMS সার্ভারের URI মান অনুযায়ী নয়। পার্স করা যাচ্ছে না, স্কিম http/https নয়, অথবা এর সঙ্গে পাথ বা কোয়েরি জুড়ে আছে।
arrow_forwardURI সংশোধন
DAT_CONFIG_UNKNOWNউপরের কোনো শ্রেণিতে পড়ে না এমন কনফিগারেশন এরর।
arrow_forwardলগ দেখুন
অভ্যন্তরীণ
কার্যকরী পরিবেশ ও রানটাইমের সমস্যা।
DAT_INTERNAL_UNAVAILABLE ক্রিপ্টো ব্যাকএন্ড বা রানটাইম API আদৌ নেই। crypto.subtle-এর অনুপস্থিতি, AES-GCM সমর্থন না করা প্ল্যাটফর্ম, কিংবা রানটাইম সংস্করণ কম হওয়া।
arrow_forwardডিপ্লয়মেন্ট ও প্ল্যাটফর্ম দেখুন
DAT_INTERNAL_UNKNOWNমেমরি বরাদ্দে ব্যর্থতা, র্যান্ডম সংখ্যা তৈরিতে ব্যর্থতা, লক অর্জনে ব্যর্থতা, অথবা অগম্য হিসেবে নকশা করা শাখায় পৌঁছে যাওয়া।
arrow_forwardলগ দেখুন
DAT_INTERNAL_UNAVAILABLE ডিপ্লয়মেন্ট পরিবেশ ঠিক করলে মিটে যায়, আর DAT_INTERNAL_UNKNOWN সাধারণত রানটাইম বিভ্রাট বা লাইব্রেরির বাগ।
CMS সিঙ্ক
CMS সিঙ্ক ব্যবহার না করলে এই কোডগুলো আসে না।
DAT_CMS_UNREACHABLEDNS ব্যর্থতা, সংযোগ প্রত্যাখ্যান, TLS ব্যর্থতা, টাইমআউট। টাইমআউট আলাদা কোড নয়, এখানেই অন্তর্ভুক্ত — কারণ প্রতিক্রিয়া একই।
arrow_forwardব্যাকঅফের পর পুনঃচেষ্টা
DAT_CMS_UNAUTHORIZEDসার্ভার 401 দিয়ে উত্তর দিয়েছে। টোকেন নেই বা ভুল।
arrow_forwardটোকেন সেটিং দেখুন
DAT_CMS_FORBIDDENসার্ভার 403 দিয়ে উত্তর দিয়েছে। টোকেন বৈধ, কিন্তু এই এন্ডপয়েন্টের অনুমতি নেই।
arrow_forwardটোকেনের স্তর দেখুন
DAT_CMS_ENDPOINT_NOT_FOUNDসার্ভার 404 দিয়ে উত্তর দিয়েছে। URL ভুল।
arrow_forwardURL সেটিং দেখুন
DAT_CMS_SERVER_ERRORসার্ভার 5xx দিয়ে উত্তর দিয়েছে।
arrow_forwardব্যাকঅফের পর পুনঃচেষ্টা
DAT_CMS_HTTP_STATUSউপরের কোনোটিতে না পড়া 2xx-বহির্ভূত উত্তর।
arrow_forwardস্ট্যাটাস কোড দেখুন
DAT_CMS_MALFORMEDউত্তরে সংস্করণের লাইন নেই, বা সংস্করণের লাইন বিশুদ্ধ দশমিক সংখ্যা নয়, অথবা সীমা ছাড়িয়ে গেছে।
arrow_forwardসার্ভারের সংস্করণ দেখুন
DAT_CMS_IMPORT_FAILED উত্তর পাওয়া গেছে কিন্তু সার্টিফিকেট প্রয়োগ করা যায়নি। কারণ cause-এ থাকে।
arrow_forwardcause-এর CERT_* / KEY_* দেখুন
DAT_CMS_VERSION_RESETসার্ভার ক্লায়েন্টের চেয়ে পুরোনো সংস্করণ ফেরত দিয়েছে। এটি পূর্ণ পুনঃসিঙ্কের নির্দেশ।
arrow_forwardস্বয়ংক্রিয়ভাবে সামলানো হয়
DAT_CMS_NOT_SYNCEDএখন পর্যন্ত একবারও সিঙ্ক সফল হয়নি এমন অবস্থা।
arrow_forwardপ্রথম সিঙ্কের অপেক্ষা
DAT_CMS_SYNC_IN_PROGRESSআগের সিঙ্ক এখনো চলছে বলে এই চক্রটি এড়িয়ে যাওয়া হয়েছে। এটি এরর নয়।
DAT_CMS_NOT_SUPPORTEDCMS সুবিধা বিল্ডে অন্তর্ভুক্ত হয়নি। হয় ফিচার সক্রিয় নয়, নয়তো CURL যুক্ত নেই।
arrow_forwardবিল্ড অপশন দেখুন
DAT_CMS_UNKNOWNউপরের কোনো শ্রেণিতে পড়ে না এমন CMS এরর।
arrow_forwardলগ দেখুন
সিঙ্ক যেসব কোডে স্থায়ী ব্যর্থতা হিসেবে গণ্য হয় (UNAUTHORIZED·FORBIDDEN·ENDPOINT_NOT_FOUND·MALFORMED·IMPORT_FAILED) সেগুলো সবই গুরুতর। পুনঃচেষ্টায় মেটে না অথচ সার্টিফিকেট মেয়াদোত্তীর্ণ হতেই থাকে, তাই অবহেলা করলে সার্ভিস অবশ্যই থেমে যাবে।
উল্টোদিকে UNREACHABLE·SERVER_ERROR আংশিক। বিদ্যমান সার্টিফিকেট দিয়ে কাজ চলতে থাকে এবং পরের চক্রে নিজেই সেরে ওঠে — তবে ব্যর্থতা চলতেই থাকলে শেষ পর্যন্ত গুরুতরে গড়ায়। তাই পরপর ব্যর্থতার সংখ্যার ভিত্তিতে অ্যালার্ট বসান।
সিঙ্ক ব্যর্থতা এক্সেপশন হিসেবে ছোড়া হয় না
প্রথম সিঙ্ক ব্যর্থ হলেও ম্যানেজার স্বাভাবিকভাবেই ফেরত আসে — কারণ দেরিতে হলেও সিঙ্ক হওয়াটাই ভালো। তার বদলে ব্যর্থতা অনুসন্ধানযোগ্য অবস্থা হিসেবে থেকে যায়।
| ক্লায়েন্ট | অনুসন্ধানের পদ্ধতি |
|---|---|
| Rust | manager.last_error().await |
| Go | manager.LastError() |
| JavaScript | manager.lastError() |
| Python | manager.last_error() |
| Ruby | manager.last_error |
| Java/Kotlin | manager.lastError |
| C# | manager.LastError |
| C/C++ | dat_cms_manager_last_error(m) |
একবারও সফল না হলে DAT_CMS_NOT_SYNCED, আর স্বাভাবিক থাকলে ফাঁকা।
সার্ভার
এগুলো CMS সার্ভারের দেওয়া কোড। ক্লায়েন্ট এগুলো তৈরি করে না, কেবল গ্রহণ করে।
DAT_AUTH_UNAUTHORIZEDAuthorization হেডার নেই, অথবা টোকেন কোনো স্তরেই নিবন্ধিত নয়।
DAT_AUTH_FORBIDDENটোকেন নিবন্ধিত আছে, কিন্তু এই এন্ডপয়েন্ট যে স্তর চায় সেটি নয়।
DAT_AUTH_DISABLEDএকটিও টোকেন সেট না থাকায় প্রমাণীকরণ পুরোপুরি নিষ্ক্রিয়। সার্টিফিকেট ইস্যুর API পর্যন্ত প্রমাণীকরণ ছাড়াই খোলা। এটি উত্তরে যায় না, কেবল বুট লগে লেখা হয়।
arrow_forwardএখনই টোকেন সেট করুন
DAT_REQ_MALFORMEDপাথ বা কোয়েরি প্যারামিটার বোঝা যায়নি, অথবা আর্গুমেন্ট অনুমোদিত সীমার বাইরে (ঋণাত্মক delay, দশ বছরের বেশি ইত্যাদি)।
DAT_REQ_ALG_UNSUPPORTEDঅনুরোধের পাথে দেওয়া অ্যালগরিদমের নাম অজানা।
DAT_REQ_NOT_FOUNDএমন কোনো রুট নেই, অথবা মেথড ভিন্ন।
DAT_REQ_TOO_LARGEঅনুরোধের body-র আকার সীমা ছাড়িয়ে গেছে।
DAT_REQ_UNKNOWNউপরের কোনো শ্রেণিতে পড়ে না এমন অনুরোধ এরর।
DAT_STORE_UNAVAILABLEDB সংযোগ বিচ্ছিন্ন, কানেকশন পুল নিঃশেষ, লক প্রতিযোগিতা, টাইমআউট। এটি 503 ব্যবহার করা একমাত্র কোড, যার মাধ্যমে ক্লায়েন্ট জানতে পারে "এটা অপেক্ষা করলে ঠিক হয়ে যাবে"।
arrow_forwardব্যাকঅফের পর পুনঃচেষ্টা
DAT_STORE_UNKNOWNপড়া বা লেখার ব্যর্থতা, টেবিল না থাকা, স্কিমার অমিল, সংরক্ষিত সার্টিফিকেট সারির ক্ষতিগ্রস্ততা।
arrow_forwardDB-র অবস্থা দেখুন
উত্তরের খাম:
{
"code": "DAT_REQ_ALG_UNSUPPORTED",
"details": { "algorithm": "BOGUS-ALG" }
}সার্টিফিকেট তৈরি ও পরিচালনার সময় যেসব এরর হয়, সার্ভারও সেগুলোর জন্য উপরের সাধারণ কোডই (DAT_CERT_*, DAT_KEY_*, DAT_CONFIG_*) ব্যবহার করে।
সার্ভারের কোড পেলে
ক্লায়েন্ট সার্ভারের কোডকে নিজের CMS কোড দিয়ে মুড়ে দেয়, আর মূলটি cause-এ সংরক্ষণ করে।
| যা পাওয়া গেল | HTTP | ক্লায়েন্ট যে কোড দেয় |
|---|---|---|
DAT_AUTH_UNAUTHORIZED | 401 | DAT_CMS_UNAUTHORIZED |
DAT_AUTH_FORBIDDEN | 403 | DAT_CMS_FORBIDDEN |
DAT_REQ_NOT_FOUND | 404 | DAT_CMS_ENDPOINT_NOT_FOUND |
DAT_REQ_* (অন্যান্য) | 400·405·413 | DAT_CMS_HTTP_STATUS |
DAT_STORE_UNAVAILABLE | 503 | DAT_CMS_SERVER_ERROR |
DAT_STORE_UNKNOWN | 500 | DAT_CMS_SERVER_ERROR |
| (সংস্করণ অবনমন) | 200 | DAT_CMS_VERSION_RESET |
উপসর্গ দিয়ে খোঁজা
| উপসর্গ | কোড |
|---|---|
| লগইনের ঠিক পরে চলে, কিছুক্ষণ পর প্রত্যাখ্যাত হয় | DAT_TOKEN_EXPIRED — টোকেনের আয়ু ফুরিয়েছে। পুনরায় ইস্যু করলেই চলবে |
| কেবল নির্দিষ্ট সার্ভারে যাচাই ব্যর্থ | DAT_CERT_NOT_SYNCED — সেই সার্ভার এখনো নতুন CID পায়নি |
| সব সার্ভারেই একই টোকেন প্রত্যাখ্যাত | DAT_CERT_NOT_FOUND — এটি এমন CID যা কখনো ইস্যু করা হয়নি |
| ইস্যু করা সার্ভার টোকেন বানাতে পারছে না | DAT_MANAGER_NO_ISSUABLE_CERTIFICATE + DAT_CERT_VERIFY_ONLY — verify-only হিসেবে বিতরণ হয়েছে |
| কেবল বুটের ঠিক পরেই ইস্যু ব্যর্থ | DAT_MANAGER_NO_CERTIFICATE — প্রথম সিঙ্কের আগে। কিছুক্ষণ পরেই মিটে যাবে |
| CMS সিঙ্ক বারবার ব্যর্থ | DAT_CMS_UNAUTHORIZED — টোকেন ভুল। পুনঃচেষ্টাতেও মিটবে না |
| একটিও সার্টিফিকেট আসছে না | DAT_CMS_ENDPOINT_NOT_FOUND — URL-এ বানান ভুল |
| কেবল নির্দিষ্ট প্ল্যাটফর্মে ব্যর্থ | DAT_INTERNAL_UNAVAILABLE — ক্রিপ্টো ব্যাকএন্ড নেই |
| যাচাই ব্যর্থতা হঠাৎ বেড়ে গেছে | DAT_SIG_MISMATCH — একটি ঘটনা নিরীহ, কিন্তু ঝাঁক বেঁধে এলে জালিয়াতির চেষ্টা |
| secure ডিক্রিপশন হঠাৎ ব্যর্থ | DAT_CRYPTO_TAG_MISMATCH — হয় সার্টিফিকেট মিলছে না, নয়তো কারসাজির চেষ্টা |
| CMS বুট লগে সতর্কবার্তা | DAT_AUTH_DISABLED — প্রমাণীকরণ বন্ধ। ইস্যুর API খোলা পড়ে আছে |
পরিশিষ্ট
কোডের গঠন
DAT_<ক্ষেত্র>_<কারণ>- একই কারণ ভিন্ন ক্ষেত্রে দেখা দিলে কারণের নাম একই থাকে।
DAT_TOKEN_MALFORMEDআরDAT_CERT_MALFORMED-এ কেবল লক্ষ্যবস্তু আলাদা, অর্থ এক। _UNKNOWNপ্রতিটি ক্ষেত্রের কেবল ফলব্যাক। "অজানা অ্যালগরিদম"-এর মতো অন্য অর্থে ব্যবহৃত হয় না (সেটি_UNSUPPORTED)।- কোড স্ট্রিং একটি প্রকাশ্য চুক্তি। বার্তা স্বাধীনভাবে বদলানো গেলেও কোড বদলানো হয় না।
| শ্রেণি | কোডের উপসর্গ |
|---|---|
| টোকেন | DAT_TOKEN_ |
| সার্টিফিকেট | DAT_CERT_ |
| স্বাক্ষর | DAT_SIG_ |
| এনক্রিপশন | DAT_CRYPTO_ |
| কী ম্যাটেরিয়াল | DAT_KEY_ |
| ম্যানেজার | DAT_MANAGER_ |
| কনফিগারেশন | DAT_CONFIG_ |
| অভ্যন্তরীণ | DAT_INTERNAL_ |
| CMS সিঙ্ক | DAT_CMS_ |
| সার্ভার | DAT_AUTH_ · DAT_REQ_ · DAT_STORE_ |
ক্লায়েন্ট অনুযায়ী অ্যাক্সেসের পদ্ধতি
| ক্লায়েন্ট | এররের ধরন | কোড | পুনঃচেষ্টার শ্রেণি | নিরাপত্তা ইভেন্ট |
|---|---|---|---|---|
| Rust | DatError enum | err.code() | err.retry() | err.security_event() |
| Go | *dat.Error | err.Code | dat.Retry(err) | dat.SecurityEvent(err) |
| JavaScript | DatError extends Error | e.code | e.retry | e.securityEvent |
| Python | DatError(ValueError, RuntimeError) | e.code | e.retry | e.security_event |
| Ruby | Saro::Dat::Error | e.code | e.retry | e.security_event? |
| Java/Kotlin | DatException | e.code | e.retry | e.securityEvent |
| C# | DatException | e.Code | e.Retry | e.SecurityEvent |
| C/C++ | dat_error_t | dat_error_code(e) | dat_error_retry(e) | dat_error_is_security_event(e) |
| CMS সার্ভার | JSON খাম | code ফিল্ড | — | — |
নিরাপত্তা ইভেন্ট কেবল জালিয়াতি ও কারসাজি নিশ্চিত এমন দুটি ক্ষেত্রেই (DAT_SIG_MISMATCH, DAT_CRYPTO_TAG_MISMATCH) true ফেরত দেয়। এই ডকুমেন্টের সন্দেহ ট্যাগের পরিধি তার চেয়ে বিস্তৃত (কারসাজি করা টোকেন, কী ও অনুরোধ পর্যন্ত), এবং এটি এখন কেবল ডকুমেন্টেশনের শ্রেণিবিভাগ — ক্লায়েন্ট API-তে প্রকাশ করা হয় না।
প্রভাব-এর মাত্রাও একইভাবে ডকুমেন্টেশনের শ্রেণিবিভাগ। কারণ একই কোড কোথায় দেখা দিল তার উপর ক্ষতির মাত্রা বদলায় — যেমন DAT_KEY_INVALID আসা টোকেন ছেঁকে ফেলার সময় প্রভাবহীন, কিন্তু CMS সিঙ্কের সময় সার্টিফিকেট পড়তে গিয়ে দেখা দিলে গোটা সিঙ্কই ব্যর্থ করে দেয়।
অধস্তন কারণ ফেলে দেওয়া হয় না। DAT_MANAGER_NO_ISSUABLE_CERTIFICATE ও DAT_CMS_IMPORT_FAILED প্রতিটি ভাষার এক্সেপশন চেইনের (cause / __cause__ / InnerException / Unwrap()) মাধ্যমে কারণ পৌঁছে দেয়।
C/C++ সংখ্যাসূচক মানও ধরে রাখে
dat_error_t-এর পুরোনো সংখ্যাসূচক মানগুলো ABI সামঞ্জস্যের জন্য অপরিবর্তিত রাখা হয়েছে, তবে টেক্সট কোডই মূল। লাইব্রেরি আর পুরোনো মান ফেরত দেয় না, তাই err == DAT_ERROR_INVALID_DAT-এর মতো তুলনা আর সঠিক নয়। dat_error_code(e) দিয়ে মিলিয়ে দেখুন।
C-তে এক্সেপশন চেইন নেই, তাই কারণ আলাদাভাবে dat_manager_issuable_cause() দিয়ে দেখা হয়।