Privet হল একটি ক্লাউড ডিভাইস লোকাল ডিসকভারি API যা ক্লাউড পরিষেবা দ্বারা ব্যবহৃত হয়। এই নথিটি নিম্নলিখিত বিভাগে সংগঠিত:
- ভূমিকা : Privet পরিচিতি
- আবিষ্কার : স্থানীয় আবিষ্কার প্রক্রিয়া
- ঘোষণা : স্থানীয় আবিষ্কারের ঘোষণা
- API : সাধারণ ক্লাউড ডিভাইসের জন্য Privet APIs
- প্রিন্টার API : প্রিন্টার দ্বারা ব্যবহৃত Privet APIs
- পরিশিষ্ট : সম্পূরক চিত্র
1. ভূমিকা
ক্লাউড কানেক্টেড ডিভাইসের অনেক সুবিধা রয়েছে। তারা অনলাইন রূপান্তর পরিষেবাগুলি ব্যবহার করতে পারে, ডিভাইসটি অফলাইনে থাকাকালীন কাজের সারিগুলি হোস্ট করতে পারে এবং বিশ্বের যে কোনও জায়গা থেকে অ্যাক্সেসযোগ্য হতে পারে৷ যাইহোক, একটি প্রদত্ত ব্যবহারকারীর দ্বারা অ্যাক্সেসযোগ্য অনেক ক্লাউড ডিভাইসের সাথে, অবস্থানের উপর ভিত্তি করে নিকটতম ডিভাইসটি খুঁজে বের করার জন্য আমাদের একটি পদ্ধতি প্রদান করতে হবে। প্রাইভেট প্রোটোকলের উদ্দেশ্য হল ক্লাউড ডিভাইসগুলির নমনীয়তাকে একটি উপযুক্ত স্থানীয় আবিষ্কার প্রক্রিয়ার সাথে আবদ্ধ করা যাতে ডিভাইসগুলি নতুন পরিবেশে সহজেই আবিষ্কৃত হয়।
এই প্রোটোকলের লক্ষ্যগুলি হল:- ক্লাউড ডিভাইসগুলিকে স্থানীয়ভাবে আবিষ্কার করা যায়
- একটি ক্লাউড পরিষেবা দিয়ে ক্লাউড ডিভাইস নিবন্ধন করুন
- নিবন্ধিত ডিভাইসগুলিকে তাদের ক্লাউড প্রতিনিধিত্বের সাথে সংযুক্ত করুন
- অফলাইন কার্যকারিতা সক্ষম করুন
- বাস্তবায়ন সহজ করুন যাতে ছোট ডিভাইস এটি ব্যবহার করতে পারে
Privet প্রোটোকল 2টি প্রধান অংশ নিয়ে গঠিত: আবিষ্কার এবং API। স্থানীয় নেটওয়ার্কে ডিভাইসটি খুঁজে পেতে ডিসকভারি ব্যবহার করা হয় এবং ডিভাইস সম্পর্কে তথ্য পেতে এবং কিছু ক্রিয়া সম্পাদন করতে API ব্যবহার করা হয়। এই নথি জুড়ে, ডিভাইসটি প্রাইভেট প্রোটোকল বাস্তবায়নকারী একটি ক্লাউড সংযুক্ত ডিভাইসকে নির্দেশ করে।
2. আবিষ্কার
আবিষ্কার হল একটি জিরোকনফ ভিত্তিক (mDNS + DNS-SD) প্রোটোকল। ডিভাইসটিকে অবশ্যই IPv4 লিঙ্ক-স্থানীয় ঠিকানা প্রয়োগ করতে হবে। ডিভাইসটিকে অবশ্যই mDNS এবং DNS-SD স্পেস মেনে চলতে হবে।
- http://www.rfc-editor.org/rfc/rfc3927.txt (IPv4 লিঙ্ক-স্থানীয়)
- http://www.rfc-editor.org/rfc/rfc4862.txt (IPv6 লিঙ্ক-স্থানীয়)
- http://www.rfc-editor.org/rfc/rfc6762.txt (mDNS)
- http://www.rfc-editor.org/rfc/rfc6763.txt (DNS-SD)
ডিভাইসটি অবশ্যই উপরোক্ত স্পেসিফিকেশন অনুযায়ী নামের দ্বন্দ্ব সমাধান করতে হবে।
2.1। পরিষেবার ধরন
DNS পরিষেবা আবিষ্কার পরিষেবার প্রকারের জন্য নিম্নলিখিত বিন্যাস ব্যবহার করে: _applicationprotocol._transportprotocol । Privet প্রোটোকলের ক্ষেত্রে, DNS-SD-এর পরিষেবার ধরনটি হওয়া উচিত: _privet._tcp
ডিভাইসটি অন্যান্য পরিষেবার প্রকারগুলিও প্রয়োগ করতে পারে। ডিভাইস দ্বারা প্রয়োগ করা সমস্ত পরিষেবা প্রকারের জন্য একই পরিষেবা উদাহরণের নাম ব্যবহার করার পরামর্শ দেওয়া হচ্ছে৷ উদাহরণস্বরূপ: একটি প্রিন্টার "প্রিন্টার XYZ._privet._tcp" এবং "প্রিন্টার XYZ._printer._tcp" পরিষেবাগুলি বাস্তবায়ন করতে পারে। এটি ব্যবহারকারীর জন্য সেটআপ সহজতর করবে। যাইহোক, Privet ক্লায়েন্টরা শুধুমাত্র "_privet._tcp" এর জন্য দেখবে।
প্রধান পরিষেবার ধরন ছাড়াও, ডিভাইসটিকে অবশ্যই তার সংশ্লিষ্ট সাব-টাইপ(গুলি) এর জন্য PTR রেকর্ডের বিজ্ঞাপন দিতে হবে (ডিএনএস-এসডি স্পেক দেখুন: "7.1। নির্বাচনী উদাহরণ গণনা (সাবটাইপ)")। বিন্যাস অনুসরণ করা উচিত: _<subtype>._sub._privet._tcp
বর্তমানে সমর্থিত একমাত্র ডিভাইস সাবটাইপ হল প্রিন্টার । সুতরাং, সমস্ত প্রিন্টারকে অবশ্যই দুটি পিটিআর রেকর্ডের বিজ্ঞাপন দিতে হবে:
- _privet._tcp.local
- _printer._sub._privet._tcp.local
2.2। TXT রেকর্ড
DNS পরিষেবা আবিষ্কার TXT রেকর্ডে একটি পরিষেবা সম্পর্কে ঐচ্ছিক তথ্য যোগ করার জন্য ক্ষেত্রগুলিকে সংজ্ঞায়িত করে৷ একটি TXT রেকর্ড কী/মান জোড়া নিয়ে গঠিত। প্রতিটি কী/মান জোড়া দৈর্ঘ্য বাইট থেকে শুরু হয় এবং 255 বাইট পর্যন্ত পাঠ্য থাকে। কী হল প্রথম '=' অক্ষরের আগে লেখা টেক্সট এবং মান হল শেষ পর্যন্ত প্রথম '=' অক্ষরের পরের টেক্সট। স্পেসিফিকেশন রেকর্ডে কোনো মান না রাখার অনুমতি দেয়, এই ক্ষেত্রে '=' অক্ষর হবে না বা '=' অক্ষরের পরে কোনো পাঠ্য থাকবে না। (ডিএনএস-এসডি স্পেস দেখুন: "6.1। DNS TXT রেকর্ডের জন্য সাধারণ বিন্যাস নিয়ম" DNS TXT রেকর্ড বিন্যাসের জন্য এবং প্রস্তাবিত দৈর্ঘ্যের জন্য "6.2. DNS-SD TXT রেকর্ড আকার")।
Privet-এর জন্য ডিভাইসটিকে TXT রেকর্ডে নিম্নলিখিত কী/মান জোড়া পাঠাতে হবে। কী/মান স্ট্রিংগুলি অক্ষর-সংবেদনশীল, উদাহরণস্বরূপ "CS=অনলাইন" এবং "cs=ONLINE" একই। TXT রেকর্ডের তথ্য অবশ্যই /info API এর মাধ্যমে অ্যাক্সেসযোগ্য হিসাবে একই হতে হবে (4.1. API বিভাগ দেখুন)।
TXT রেকর্ডের আকার 512 বাইটের নিচে রাখার সুপারিশ করা হয়।
2.2.1। txtvers
TXT কাঠামোর সংস্করণ। txtvers অবশ্যই TXT কাঠামোর প্রথম রেকর্ড হতে হবে। বর্তমানে একমাত্র সমর্থিত সংস্করণ হল 1।
txtvers=1
2.2.2। ty
ডিভাইসের একটি ব্যবহারকারী-পাঠযোগ্য নাম প্রদান করে। যেমন:
ty=Google Cloud Ready Printer Model XYZ
2.2.3। নোট (ঐচ্ছিক)
ডিভাইসের একটি ব্যবহারকারী-পাঠযোগ্য নাম প্রদান করে। যেমন:
note=1st floor lobby printer
দ্রষ্টব্য: এটি একটি ঐচ্ছিক কী এবং এড়িয়ে যাওয়া হতে পারে৷ যাইহোক, যদি উপস্থিত থাকে, ব্যবহারকারী এই মান পরিবর্তন করতে সক্ষম হওয়া উচিত। ডিভাইস নিবন্ধন করার সময় একই বিবরণ ব্যবহার করা আবশ্যক।
2.2.4। url
সার্ভার URL এই ডিভাইসটি সংযুক্ত (প্রটোকল সহ)। যেমন:
url=https://www.google.com/cloudprint
2.2.5। প্রকার
এই ডিভাইস দ্বারা সমর্থিত ডিভাইস সাব-টাইপগুলির কমা দ্বারা পৃথক করা তালিকা। বিন্যাস হল: "type=_subtype1, _subtype2"। বর্তমানে, একমাত্র সমর্থিত ডিভাইস সাবটাইপ হল প্রিন্টার ।
type=printer
তালিকাভুক্ত প্রতিটি উপপ্রকার একটি সংশ্লিষ্ট পিটিআর রেকর্ড ব্যবহার করে বিজ্ঞাপন দেওয়া উচিত। প্রতিটি সমর্থিত পরিষেবা উপ-প্রকারের জন্য, একটি সংশ্লিষ্ট আইটেম থাকা উচিত। পরিষেবার সাবটাইপের নাম (<subtype>._sub._privet._tcp) এখানে ডিভাইসের প্রকারের সমান হওয়া উচিত।
2.2.6। আইডি
ডিভাইস আইডি। যদি ডিভাইসটি এখনও নিবন্ধিত না হয় তবে এই কীটি উপস্থিত থাকা উচিত, তবে মান খালি হওয়া উচিত। যেমন:
id=11111111-2222-3333-4444-555555555555 id=
2.2.7। cs
ডিভাইসের বর্তমান সংযোগ অবস্থা নির্দেশ করে। চারটি সম্ভাব্য মান এই বৈশিষ্ট্যে সংজ্ঞায়িত করা হয়েছে।
- "অনলাইন" নির্দেশ করে যে ডিভাইসটি বর্তমানে ক্লাউডের সাথে সংযুক্ত রয়েছে৷
- "অফলাইন" নির্দেশ করে যে ডিভাইসটি স্থানীয় নেটওয়ার্কে উপলব্ধ, কিন্তু সার্ভারের সাথে কথা বলতে পারে না৷
- "সংযোগ" নির্দেশ করে যে ডিভাইসটি তার স্টার্টআপ সিকোয়েন্স সম্পাদন করছে এবং এখনও সম্পূর্ণ অনলাইন নয়৷
- "কনফিগার করা হয়নি" নির্দেশ করে যে ডিভাইসের ইন্টারনেট অ্যাক্সেস এখনও কনফিগার করা হয়নি। এই মানটি বর্তমানে ব্যবহার করা হয় না, তবে স্পেসিফিকেশনের ভবিষ্যতের সংস্করণে উপযোগী হতে পারে।
- cs=অনলাইন
- cs=অফলাইন
- cs = সংযোগ
যদি ডিভাইসটি একটি ক্লাউডের সাথে নিবন্ধিত হয়ে থাকে, তবে স্টার্টআপে এটির সংযোগের অবস্থা সনাক্ত করতে সার্ভারের সাথে সংযোগ পরীক্ষা করা উচিত (উদাহরণস্বরূপ, ডিভাইস সেটিংস পেতে ক্লাউড API কল করা)। এই মান রিপোর্ট করতে ডিভাইসটি তার বিজ্ঞপ্তি চ্যানেল (যেমন XMPP) সংযোগ অবস্থা ব্যবহার করতে পারে। স্টার্টআপে অনিবন্ধিত ডিভাইসগুলি তাদের সংযোগের অবস্থা সনাক্ত করার জন্য একটি ডোমেনকে পিং করতে পারে (উদাহরণস্বরূপ, ক্লাউড প্রিন্ট ডিভাইসের জন্য www.google.com পিং)।
3. ঘোষণা
ডিভাইস স্টার্টআপ, শাটডাউন বা অবস্থা পরিবর্তনের সময়, ডিভাইসটিকে অবশ্যই mDNS স্পেসিফিকেশনে বর্ণিত ঘোষণার ধাপটি সম্পাদন করতে হবে। এটি তাদের মধ্যে অন্তত এক-সেকেন্ডের ব্যবধানে কমপক্ষে দুবার সংশ্লিষ্ট ঘোষণা পাঠাতে হবে।
3.1। স্টার্টআপ
ডিভাইস স্টার্টআপে এটি অবশ্যই mDNS স্পেসিফিকেশনে বর্ণিত পদক্ষেপগুলি অনুসন্ধান এবং ঘোষণার পদক্ষেপগুলি সম্পাদন করবে৷ এক্ষেত্রে SRV, PTR এবং TXT রেকর্ড পাঠাতে হবে। সম্ভব হলে সমস্ত রেকর্ডকে একটি DNS প্রতিক্রিয়াতে গোষ্ঠীভুক্ত করার পরামর্শ দেওয়া হয়। যদি না হয়, নিম্নলিখিত অর্ডার সুপারিশ করা হয়: SRV, PTR, TXT রেকর্ড।
3.2। শাটডাউন
ডিভাইস শাটডাউনে এটি TTL=0 (mDNS ডকুমেন্টেশনে বর্ণিত) সহ একটি "গুডবাই প্যাকেট" পাঠিয়ে এটি সম্পর্কে সমস্ত আগ্রহী পক্ষকে অবহিত করার চেষ্টা করা উচিত।
3.3। আপডেট
TXT-তে বর্ণিত কোনো তথ্য পরিবর্তিত হলে, ডিভাইসটিকে অবশ্যই একটি আপডেট ঘোষণা পাঠাতে হবে। এই ক্ষেত্রে শুধুমাত্র নতুন TXT রেকর্ড পাঠানোই যথেষ্ট। উদাহরণস্বরূপ, একটি ডিভাইস নিবন্ধিত হওয়ার পরে, এটি অবশ্যই নতুন ডিভাইস আইডি সহ একটি আপডেট ঘোষণা পাঠাতে হবে৷
4. API
একটি ক্লাউড ডিভাইস আবিষ্কৃত হওয়ার পরে, স্থানীয় নেটওয়ার্কের মাধ্যমে সরাসরি ডিভাইসের সাথে ক্লায়েন্ট যোগাযোগ সক্ষম করা হয়। সমস্ত API HTTP 1.1 ভিত্তিক। ডেটা ফরম্যাটগুলি JSON ভিত্তিক। API অনুরোধগুলি GET বা POST অনুরোধ হতে পারে৷
প্রতিটি অনুরোধে একটি বৈধ " X-Privet-Token " শিরোনাম থাকা আবশ্যক৷ শুধুমাত্র একটি খালি "X-Privet-Token" শিরোনাম রাখার অনুমতি দেওয়া হল /privet/info অনুরোধ (মনে রাখবেন যে শিরোনামটি এখনও উপস্থিত থাকতে হবে)। যদি "X-Privet-Token" শিরোনামটি অনুপস্থিত থাকে, তাহলে ডিভাইসটিকে অবশ্যই নিম্নলিখিত HTTP 400 ত্রুটির সাথে প্রতিক্রিয়া জানাতে হবে:
HTTP/1.1 400 Missing X-Privet-Token header.
যদি "X-Privet-Token" শিরোনাম খালি বা অবৈধ হয়, তাহলে ডিভাইসটিকে অবশ্যই "অবৈধ X-Privet-টোকেন ত্রুটি" সহ প্রতিক্রিয়া জানাতে হবে (invalid_x_privet_token, বিস্তারিত জানার জন্য ত্রুটি বিভাগ দেখুন)। একমাত্র ব্যতিক্রম হল /info API। কেন এটি করা হয় এবং কীভাবে টোকেন তৈরি করা উচিত সে সম্পর্কে আরও তথ্যের জন্য, পরিশিষ্ট A দেখুন: XSSI এবং XSRF আক্রমণ এবং প্রতিরোধ।
একটি অনুরোধ করা API বিদ্যমান না থাকলে বা সমর্থিত না হলে, ডিভাইসটিকে অবশ্যই একটি HTTP 404 ত্রুটি ফেরত দিতে হবে৷
4.1। API প্রাপ্যতা
যেকোনো API (/info API সহ) প্রকাশ করার আগে, স্থানীয় সেটিংস চেক করতে ডিভাইসটিকে অবশ্যই সার্ভারের সাথে যোগাযোগ করতে হবে। স্থানীয় সেটিংস পুনঃসূচনা মধ্যে সংরক্ষণ করা আবশ্যক. সার্ভার উপলব্ধ না হলে, সর্বশেষ পরিচিত স্থানীয় সেটিংস ব্যবহার করা উচিত। ডিভাইসটি এখনও নিবন্ধিত না হলে, এটি ডিফল্ট সেটিংস অনুসরণ করা উচিত।
ক্লাউড প্রিন্ট ডিভাইসগুলিকে নিবন্ধন, গ্রহণ এবং স্থানীয় সেটিংস আপডেট করতে নীচের পদক্ষেপগুলি অনুসরণ করতে হবে৷
4.1.1। নিবন্ধন
যখন ডিভাইসটি নিবন্ধিত হয়, তখন এটিকে অবশ্যই "স্থানীয়_সেটিংস" পরামিতি উল্লেখ করতে হবে, নিম্নরূপ:
{ "current": { "local_discovery": true, "access_token_enabled": true, "printer/local_printing_enabled": true, "printer/conversion_printing_enabled": true, "xmpp_timeout_value": 300 } }
মান নাম | মান প্রকার | বর্ণনা |
---|---|---|
স্থানীয়_আবিষ্কার | বুলিয়ান | স্থানীয় আবিষ্কারের কার্যকারিতা অনুমোদিত কিনা তা নির্দেশ করে। "মিথ্যা" হলে, সমস্ত স্থানীয় API (/তথ্য সহ) এবং DNS-SD আবিষ্কার অক্ষম করতে হবে। ডিফল্টরূপে, নতুন নিবন্ধিত ডিভাইস "সত্য" পাস করা উচিত। |
অ্যাক্সেস_টোকেন_সক্ষম | বুলিয়ান (ঐচ্ছিক) | স্থানীয় নেটওয়ার্কে /accesstoken API প্রকাশ করা উচিত কিনা তা নির্দেশ করে। ডিফল্টরূপে "সত্য" হওয়া উচিত। |
প্রিন্টার/স্থানীয়_মুদ্রণ_সক্ষম | বুলিয়ান (ঐচ্ছিক) | স্থানীয় নেটওয়ার্কে স্থানীয় মুদ্রণ কার্যকারিতা (/প্রিন্টার/ক্রিয়েটজব, /প্রিন্টার/সাবমিটডক, /প্রিন্টার/জবস্টেট) প্রকাশ করা উচিত কিনা তা নির্দেশ করে। ডিফল্টরূপে "সত্য" হওয়া উচিত। |
প্রিন্টার/রূপান্তর_মুদ্রণ_সক্ষম | বুলিয়ান (ঐচ্ছিক) | স্থানীয় মুদ্রণ রূপান্তরের জন্য সার্ভারে কাজ পাঠাতে পারে কিনা তা নির্দেশ করে। স্থানীয় মুদ্রণ সক্ষম হলেই কেবল তা বোঝা যায়। |
xmpp_timeout_value | int (ঐচ্ছিক) | XMPP চ্যানেল পিংগুলির মধ্যে সেকেন্ডের সংখ্যা নির্দেশ করে৷ ডিফল্টরূপে 300 (5 মিনিট) বা তার বেশি হতে হবে। |
গুরুত্বপূর্ণ: কোনো ঐচ্ছিক মানের অভাব নির্দেশ করে যে সংশ্লিষ্ট কার্যকারিতা ডিভাইস দ্বারা সম্পূর্ণরূপে অসমর্থিত।
4.1.2। স্টার্টআপ
ডিভাইস স্টার্টআপে, স্থানীয় নেটওয়ার্কে প্রকাশ করার জন্য কী কী API পাওয়া যায় তা পরীক্ষা করতে সার্ভারের সাথে যোগাযোগ করা উচিত। ক্লাউড প্রিন্টের সাথে সংযুক্ত প্রিন্টারদের জন্য, তাদের কল করা উচিত:
/cloudprint/printer?printerid=<printer_id>
/cloudprint/list
/ক্লাউডপ্রিন্ট/প্রিন্টারকে /ক্লাউডপ্রিন্ট/তালিকা থেকে পছন্দ করা হয়, তবে উভয়ই কাজ করবে।
স্থানীয় API-এর সেটিংস সহ এই API বর্তমান ডিভাইসের পরামিতি প্রদান করে। সার্ভার থেকে উত্তর নিম্নলিখিত বিন্যাস থাকবে:
"local_settings": { "current": { "local_discovery": true, "access_token_enabled": true, "printer/local_printing_enabled": true, "printer/conversion_printing_enabled": true, "xmpp_timeout_value": 300 }, "pending": { "local_discovery": true, "access_token_enabled": true, "printer/local_printing_enabled": false, "printer/conversion_printing_enabled": false, "xmpp_timeout_value": 500 } }
"বর্তমান" বস্তু সেটিংস নির্দেশ করে যা এই মুহূর্তে কার্যকর।
"মুলতুবি" বস্তুটি নির্দেশ করে যে সেটিংস ডিভাইসে প্রয়োগ করা উচিত (এই বস্তুটি অনুপস্থিত হতে পারে)।
একবার ডিভাইসটি "মুলতুবি" সেটিংস দেখে, এটি অবশ্যই তার অবস্থা আপডেট করবে (নীচে দেখুন)।
4.1.3। আপডেট
সেটিংস আপডেটের প্রয়োজন হলে, ডিভাইসে একটি XMPP বিজ্ঞপ্তি পাঠানো হবে। বিজ্ঞপ্তিটি নিম্নলিখিত বিন্যাসে হবে:
<device_id>/update_settings
এই ধরনের একটি বিজ্ঞপ্তি প্রাপ্তির পরে, ডিভাইসটিকে অবশ্যই সাম্প্রতিক সেটিংস পেতে সার্ভারকে জিজ্ঞাসা করতে হবে৷ ক্লাউড প্রিন্ট ডিভাইস অবশ্যই ব্যবহার করতে হবে:
/cloudprint/printer?printerid=<printer_id>
একবার ডিভাইসটি /ক্লাউডপ্রিন্ট/প্রিন্টার API (স্টার্টআপে বা বিজ্ঞপ্তির কারণে) এর ফলে "মুলতুবি" বিভাগটি দেখে, নতুন সেটিংস মনে রাখার জন্য এটির অভ্যন্তরীণ অবস্থা আপডেট করতে হবে। নতুন সেটিংস নিশ্চিত করতে সার্ভার API কল করতে হবে। ক্লাউড প্রিন্টারের জন্য, ডিভাইসটিকে অবশ্যই /ক্লাউডপ্রিন্ট/আপডেট API কল করতে হবে এবং রেজিস্ট্রেশনের সময় "স্থানীয়_সেটিংস" প্যারামিটার ব্যবহার করতে হবে।
XMPP চ্যানেলের সাথে পুনরায় সংযোগ করার সময়, ডিভাইসটিকে অবশ্যই /ক্লাউডপ্রিন্ট/প্রিন্টার এপিআই কল করতে হবে যাতে শেষ সময় থেকে স্থানীয় সেটিংস পরিবর্তন করা হয়েছে কিনা।
4.1.3.1। স্থানীয় সেটিংস মুলতুবি৷
"স্থানীয়_সেটিংস" প্যারামিটার যা ডিভাইসটি সার্ভার API কল করতে ব্যবহার করে তাতে কখনই "মুলতুবি" বিভাগ থাকতে হবে না।
4.1.3.2। স্থানীয় সেটিংস বর্তমান
শুধুমাত্র ডিভাইসটি "স্থানীয়_সেটিংস" এর "বর্তমান" বিভাগটি পরিবর্তন করতে পারে। অন্য সবাই "মুলতুবি" বিভাগটি পরিবর্তন করবে, এবং ডিভাইস দ্বারা "বর্তমান" বিভাগে পরিবর্তনগুলি প্রচার না হওয়া পর্যন্ত অপেক্ষা করুন৷
4.1.4 অফলাইন
স্টার্টআপের সময় সার্ভারের সাথে যোগাযোগ করতে না পারলে, বিজ্ঞপ্তির পরে, ডিভাইসটি অবশ্যই সর্বশেষ পরিচিত স্থানীয় সেটিংস ব্যবহার করবে।
4.1.5। পরিষেবা থেকে ডিভাইস মুছে ফেলা হচ্ছে
যদি ডিভাইসটি পরিষেবা থেকে মুছে ফেলা হয় (উদাহরণস্বরূপ GCP), ডিভাইসটিতে একটি XMPP বিজ্ঞপ্তি পাঠানো হবে। বিজ্ঞপ্তিটি নিম্নলিখিত বিন্যাসে হবে:
<device_id>/delete
এই ধরনের একটি বিজ্ঞপ্তি পাওয়ার পর, ডিভাইসটিকে অবশ্যই সার্ভারে গিয়ে তার অবস্থা পরীক্ষা করতে হবে। ক্লাউড প্রিন্ট ডিভাইস অবশ্যই ব্যবহার করতে হবে:
/cloudprint/printer?printerid=<printer_id>
ডিভাইসটি অবশ্যই সফল = মিথ্যা এবং কোনো ডিভাইস/প্রিন্টার বিবরণ সহ একটি সফল HTTP উত্তর পাবে। এর অর্থ হল ডিভাইসটি সার্ভার থেকে সরানো হয়েছে, এবং ডিভাইসটিকে অবশ্যই তার শংসাপত্রগুলি মুছে ফেলতে হবে এবং ডিফল্ট ফ্যাক্টরি সেটিংস মোডে যেতে হবে৷
যে কোনো সময় ডিভাইসটি /ক্লাউডপ্রিন্ট/প্রিন্টার API (স্টার্টআপ, আপডেট সেটিংস বিজ্ঞপ্তি, দৈনিক পিং) এর ফলে এটি মুছে ফেলা হয়েছে নির্দেশ করে এমন একটি উত্তর পায়, এটি অবশ্যই তার প্রমাণপত্র মুছে ফেলতে হবে এবং ডিফল্ট মোডে যেতে হবে।
4.2। /privet/info API
তথ্য API বাধ্যতামূলক এবং প্রতিটি ডিভাইস দ্বারা প্রয়োগ করা আবশ্যক। এটি "/privet/info" url-এর জন্য একটি HTTP GET অনুরোধ: GET /privet/info HTTP/1.1
তথ্য API একটি ডিভাইস এবং এটি সমর্থন করে কার্যকারিতা সম্পর্কে প্রাথমিক তথ্য প্রদান করে। এই এপিআই কখনই ডিভাইসের স্থিতি পরিবর্তন করবে না বা কোনো কাজ করবে না, কারণ এটি XSRF আক্রমণের জন্য ঝুঁকিপূর্ণ। এটি একটি খালি "এক্স-প্রাইভেট-টোকেন" শিরোনাম রাখার জন্য অনুমোদিত একমাত্র API। ক্লায়েন্টদের /privet/info API কল করা উচিত "X-Privet-Token" শিরোনাম X-Privet-Token-এ সেট করা: ""
তথ্য API-কে অবশ্যই আবিষ্কারের সময় TXT রেকর্ডে উপলব্ধ ডেটার সাথে সামঞ্জস্যপূর্ণ ডেটা ফেরত দিতে হবে।
4.2.1। ইনপুট
/privet/info API এর কোন ইনপুট প্যারামিটার নেই।
4.2.2। প্রত্যাবর্তন
/privet/info API ডিভাইস এবং সমর্থিত কার্যকারিতা সম্পর্কে প্রাথমিক তথ্য প্রদান করে।
TXT কলাম DNS-SD TXT রেকর্ডের সংশ্লিষ্ট ক্ষেত্র নির্দেশ করে।
মান নাম | মান প্রকার | বর্ণনা | TXT |
---|---|---|---|
সংস্করণ | স্ট্রিং | API-এর সর্বোচ্চ সংস্করণ (major.minor) সমর্থিত, বর্তমানে 1.0 | |
নাম | স্ট্রিং | ডিভাইসটির মানুষের পঠনযোগ্য নাম। | ty |
বর্ণনা | স্ট্রিং | (ঐচ্ছিক) ডিভাইসের বিবরণ। ব্যবহারকারী দ্বারা পরিবর্তনযোগ্য হওয়া উচিত। | নোট |
url | স্ট্রিং | এই ডিভাইসটি যে সার্ভারের সাথে কথা বলছে তার URL৷ ইউআরএলে অবশ্যই প্রোটোকল স্পেসিফিকেশন থাকতে হবে, যেমন: https://www.google.com/cloudprint। | url |
প্রকার | স্ট্রিং তালিকা | সমর্থিত ডিভাইস প্রকারের তালিকা। | প্রকার |
আইডি | স্ট্রিং | ডিভাইস আইডি, খালি যদি ডিভাইস এখনও নিবন্ধিত না হয়. | আইডি |
device_state | স্ট্রিং | ডিভাইসের অবস্থা। নিষ্ক্রিয় মানে ডিভাইস প্রস্তুত প্রক্রিয়াকরণ মানে ডিভাইস ব্যস্ত এবং কার্যকারিতা কিছু সময়ের জন্য সীমিত হতে পারে থামানো মানে ডিভাইস কাজ করছে না এবং ব্যবহারকারীর হস্তক্ষেপ প্রয়োজন | |
সংযোগ_স্থিতি | স্ট্রিং | সার্ভারের সাথে সংযোগের অবস্থা (base_url) অনলাইন - সংযোগ উপলব্ধ অফলাইন - কোন সংযোগ নেই সংযোগ করা - স্টার্টআপ পদক্ষেপগুলি সম্পাদন করা কনফিগার করা হয়নি - সংযোগ এখনও কনফিগার করা হয়নি একটি নিবন্ধিত ডিভাইস বিজ্ঞপ্তি চ্যানেলের অবস্থার (যেমন XMPP সংযোগ অবস্থা) উপর ভিত্তি করে তার সংযোগের অবস্থা রিপোর্ট করতে পারে। | cs |
প্রস্তুতকারক | স্ট্রিং | ডিভাইস প্রস্তুতকারকের নাম | |
মডেল | স্ট্রিং | ডিভাইসের মডেল | |
ক্রমিক_সংখ্যা | স্ট্রিং | অনন্য ডিভাইস শনাক্তকারী। এই বৈশিষ্ট্যে, এটি অবশ্যই একটি UUID হতে হবে। (GCP 1.1 বিশেষত্ব) (ঐচ্ছিক) আমরা দৃঢ়ভাবে সব জায়গায় একই সিরিয়াল নম্বর আইডি ব্যবহার করার পরামর্শ দিই, যাতে বিভিন্ন ক্লায়েন্ট একই ডিভাইস সনাক্ত করতে পারে। উদাহরণস্বরূপ, আইপিপি বাস্তবায়নকারী প্রিন্টাররা "প্রিন্টার-ডিভাইস-আইডি" ক্ষেত্রে এই সিরিয়াল নম্বর আইডি ব্যবহার করতে পারে। | |
ফার্মওয়্যার | স্ট্রিং | ডিভাইস ফার্মওয়্যার সংস্করণ | |
আপটাইম | int | ডিভাইস বুট থেকে সেকেন্ডের সংখ্যা। | |
সেটআপ_ইউআরএল | স্ট্রিং | (ঐচ্ছিক) সেটআপ নির্দেশাবলী সহ পৃষ্ঠার URL (প্রটোকল সহ) | |
support_url | স্ট্রিং | (ঐচ্ছিক) সমর্থন সহ পৃষ্ঠার URL (প্রটোকল সহ), প্রায়শই জিজ্ঞাসা করা প্রশ্নাবলী তথ্য | |
আপডেট_ইউআরএল | স্ট্রিং | (ঐচ্ছিক) আপডেট ফার্মওয়্যার নির্দেশাবলী সহ পৃষ্ঠার URL (প্রটোকল সহ) | |
x-privet-টোকেন | স্ট্রিং | X-Privet-Token হেডারের মান যা XSSI এবং XSRF আক্রমণ প্রতিরোধ করার জন্য সমস্ত API-তে পাস করতে হবে। দেখুন 6.1। বিস্তারিত জানার জন্য | |
এপিআই | API-এর বিবরণ | সমর্থিত API-এর তালিকা (নীচে বর্ণিত) | |
শব্দার্থক_রাষ্ট্র | JSON | (ঐচ্ছিক) CloudDeviceState ফর্ম্যাটে ডিভাইসের শব্দার্থিক অবস্থা। |
api - স্থানীয় নেটওয়ার্কের মাধ্যমে উপলব্ধ API-এর তালিকা ধারণকারী একটি JSON তালিকা। মনে রাখবেন যে স্থানীয় নেটওয়ার্কে একই সময়ে সমস্ত API উপলব্ধ নাও হতে পারে৷ উদাহরণস্বরূপ, একটি নতুন সংযুক্ত ডিভাইস শুধুমাত্র /register api সমর্থন করবে:
"api": [ "/privet/register", ]
"api": [ "/privet/accesstoken", "/privet/capabilities", "/privet/printer/submitdoc", ]
নিম্নলিখিত APIগুলি এই সময়ে উপলব্ধ:
- /privet/register - স্থানীয় নেটওয়ার্কে ডিভাইস নিবন্ধনের জন্য API। (বিশদ বিবরণের জন্য /privet/register API দেখুন)। ডিভাইসটি সফলভাবে ক্লাউডে নিবন্ধিত হওয়ার পরে এই APIটি অবশ্যই লুকানো উচিত৷
- /privet/accesstoken - ডিভাইস থেকে অ্যাক্সেস টোকেন অনুরোধ করার জন্য API (বিশদ বিবরণের জন্য /privet/accesstoken API দেখুন)।
- /privet/ক্ষমতা - ডিভাইসের ক্ষমতা পুনরুদ্ধার করতে API (বিশদ বিবরণের জন্য /privet/ক্ষমতা API দেখুন)।
- /privet/printer/* - "প্রিন্টার" ডিভাইসের জন্য নির্দিষ্ট API, বিস্তারিত জানার জন্য প্রিন্টার নির্দিষ্ট API দেখুন।
{ "version": "1.0", "name": "Gene’s printer", "description": "Printer connected through Chrome connector", "url": "https://www.google.com/cloudprint", "type": [ "printer" ], "id": "11111111-2222-3333-4444-555555555555", "device_state": "idle", "connection_state": "online", "manufacturer": "Google", "model": "Google Chrome", "serial_number": "1111-22222-33333-4444", "firmware": "24.0.1312.52", "uptime": 600, "setup_url": "http://support.google.com/cloudprint/answer/1686197/?hl=en", "support_url": "http://support.google.com/cloudprint/?hl=en", "update_url": "http://support.google.com/cloudprint/?hl=en", "x-privet-token": "AIp06DjQd80yMoGYuGmT_VDAApuBZbInsQ:1358377509659", "api": [ "/privet/accesstoken", "/privet/capabilities", "/privet/printer/submitdoc", ] }
{ "version": "1.0", "name": "Gene’s printer", "description": "Printer connected through Chrome connector", "url": "https://www.google.com/cloudprint", "type": [ "printer" ], "id": "11111111-2222-3333-4444-555555555555", "device_state": "stopped", "connection_state": "online", "manufacturer": "Google", "model": "Google Chrome", "serial_number": "1111-22222-33333-4444", "firmware": "24.0.1312.52", "uptime": 600, "setup_url": "http://support.google.com/cloudprint/answer/1686197/?hl=en", "support_url": "http://support.google.com/cloudprint/?hl=en", "update_url": "http://support.google.com/cloudprint/?hl=en", "x-privet-token": "AIp06DjQd80yMoGYuGmT_VDAApuBZbInsQ:1358377509659", "api": [ "/privet/accesstoken", "/privet/capabilities", "/privet/printer/submitdoc", ], "semantic_state": { "version": "1.0", "printer": { "state": "STOPPED", "marker_state": { "item": [ { "vendor_id": "ink", "state": "EXHAUSTED", "level_percent": 0 } ] } } } }
4.2.3। ত্রুটি
X-Privet-Token হেডার অনুপস্থিত থাকলে /privet/info API শুধুমাত্র একটি ত্রুটি ফেরত দেবে। এটি HTTP 400 ত্রুটি হতে হবে:
HTTP/1.1 400 Missing X-Privet-Token header.
4.3। /privet/রেজিস্টার API
/privet/register API ঐচ্ছিক। এটি একটি HTTP POST অনুরোধ। /privet/register API অবশ্যই একটি বৈধ X-Privet-টোকেন হেডারের জন্য পরীক্ষা করতে হবে। ডিভাইসটিকে অবশ্যই "/privet/register" url-এ এই API প্রয়োগ করতে হবে:
POST /privet/register?action=start&user=user@domain.com HTTP/1.1 POST /privet/register?action=complete&user=user@domain.com HTTP/1.1
ডিভাইসটিকে /privet/register API প্রকাশ করা উচিত যখন এটি এই মুহূর্তে বেনামী নিবন্ধনের অনুমতি দেয়। যেমন:
- যখন ডিভাইসটি চালু থাকে (অথবা ডিভাইসে একটি বিশেষ বোতামে ক্লিক করার পরে) এবং এখনও নিবন্ধন করা হয়নি, তখন স্থানীয় নেটওয়ার্ক থেকে একজন ব্যবহারকারীকে প্রিন্টার দাবি করার অনুমতি দেওয়ার জন্য এটি /privet/register API প্রকাশ করবে৷
- রেজিস্ট্রেশন সম্পূর্ণ হওয়ার পর, ডিভাইসটিকে স্থানীয় নেটওয়ার্কে অন্য ব্যবহারকারীকে ডিভাইসটি পুনঃ দাবি করা থেকে আটকাতে /privet/register API প্রকাশ করা বন্ধ করতে হবে।
- কিছু ডিভাইসে ডিভাইস নিবন্ধন করার বিভিন্ন উপায় থাকতে পারে এবং /privet/register API (উদাহরণস্বরূপ, Chrome ক্লাউড প্রিন্ট সংযোগকারী) প্রকাশ করা উচিত নয়।
নিবন্ধন প্রক্রিয়াটি 3টি ধাপ নিয়ে গঠিত (ক্লাউড প্রিন্টের জন্য বেনামী নিবন্ধন দেখুন)।
- বেনামী নিবন্ধন প্রক্রিয়া শুরু করুন.
- একজন ক্লায়েন্ট /privet/register API কল করে এই প্রক্রিয়াটি শুরু করে। ডিভাইসটি সেই সময়ে ব্যবহারকারীর নিশ্চিতকরণের জন্য অপেক্ষা করতে পারে।
- দাবি টোকেন পান.
ডিভাইসটি কখন চালিয়ে যাওয়ার জন্য প্রস্তুত তা জানতে ক্লায়েন্ট পোল করে। একবার ডিভাইসটি প্রস্তুত হলে, এটি সার্ভারের কাছে নিবন্ধন টোকেন এবং নিবন্ধন URL পুনরুদ্ধার করার জন্য একটি অনুরোধ পাঠায়। প্রাপ্ত টোকেন এবং URL ক্লায়েন্টকে ফেরত দিতে হবে। এই ধাপে, ডিভাইসটি যদি রেজিস্ট্রেশন শুরু করার জন্য আরেকটি কল পায়, তাহলে এটি করা উচিত:
- যদি এটি একই ব্যবহারকারী হন যিনি নিবন্ধন শুরু করেছেন - সমস্ত পূর্ববর্তী ডেটা (যদি থাকে) ফেলে দিন এবং একটি নতুন নিবন্ধন প্রক্রিয়া শুরু করুন৷
- যদি এটি ভিন্ন ব্যবহারকারী হয় - ডিভাইস_ব্যস্ত ত্রুটি এবং 30 সেকেন্ডের টাইমআউট ফেরত দিন।
সম্পূর্ণ রেজিস্ট্রেশন প্রক্রিয়া।
ক্লায়েন্ট ডিভাইসটি দাবি করার পরে, ক্লায়েন্টকে রেজিস্ট্রেশন সম্পূর্ণ করার জন্য ডিভাইসটিকে অবহিত করা উচিত। রেজিস্ট্রেশন প্রক্রিয়া সম্পূর্ণ হলে, ডিভাইসটিকে নতুন অর্জিত ডিভাইস আইডি সহ একটি আপডেট ঘোষণা পাঠাতে হবে।
দ্রষ্টব্য: যখন ডিভাইসটি একটি /privet/register API কল প্রক্রিয়া করছে, তখন অন্য কোন /privet/register API কল একই সাথে প্রক্রিয়া করা যাবে না। ডিভাইসটি অবশ্যই ডিভাইস_ব্যস্ত ত্রুটি এবং 30 সেকেন্ডের টাইমআউট ফেরত দেবে।
ডিভাইসে নিবন্ধনের জন্য ব্যবহারকারী নিশ্চিতকরণ অত্যন্ত সুপারিশ করা হয়. বাস্তবায়িত হলে, ডিভাইসটিকে /privet/register?action=start API কল পাওয়ার পর ব্যবহারকারীর নিশ্চিতকরণের জন্য অপেক্ষা করতে হবে। ক্লায়েন্ট /privet/register?action=getClaimToken API-এ কল করবে কখন ব্যবহারকারীর নিশ্চিতকরণ সম্পূর্ণ হয়েছে এবং টোকেন পাওয়া যাবে তা জানতে। যদি ব্যবহারকারী ডিভাইসে নিবন্ধন বাতিল করে (যেমন বাতিল বোতাম টিপুন), user_cancel ত্রুটি অবশ্যই ফেরত দিতে হবে। ব্যবহারকারী একটি নির্দিষ্ট সময়সীমার মধ্যে নিবন্ধন নিশ্চিত না করলে, নিশ্চিতকরণ_টাইমআউট ত্রুটিটি অবশ্যই ফেরত দিতে হবে। আরো বিস্তারিত জানার জন্য ডিফল্ট বিভাগ দেখুন.
4.3.1। ইনপুট
/privet/register API-এর নিম্নলিখিত ইনপুট পরামিতি রয়েছে:নাম | মান |
---|---|
কর্ম | নিম্নলিখিতগুলির মধ্যে একটি হতে পারে: শুরু - নিবন্ধন প্রক্রিয়া শুরু করতে getClaimToken - ডিভাইসের জন্য দাবি টোকেন পুনরুদ্ধার করুন বাতিল - নিবন্ধন প্রক্রিয়া বাতিল করতে সম্পূর্ণ - নিবন্ধন প্রক্রিয়া সম্পূর্ণ করতে |
ব্যবহারকারী | এই ডিভাইসটি দাবি করবে এমন ব্যবহারকারীর ইমেল। |
ডিভাইসটিকে অবশ্যই পরীক্ষা করতে হবে যে সমস্ত অ্যাকশনের ইমেল ঠিকানা (শুরু, getClaimToken, বাতিল, সম্পূর্ণ) মেলে।
4.3.2। প্রত্যাবর্তন
/privet/register API নিম্নলিখিত ডেটা প্রদান করে:মান নাম | মান প্রকার | বর্ণনা |
---|---|---|
কর্ম | স্ট্রিং | ইনপুট পরামিতি হিসাবে একই কর্ম। |
ব্যবহারকারী | স্ট্রিং (ঐচ্ছিক) | ইনপুট প্যারামিটারের মতো একই ব্যবহারকারী (ইনপুটে বাদ দিলে অনুপস্থিত হতে পারে)। |
টোকেন | স্ট্রিং (ঐচ্ছিক) | রেজিস্ট্রেশন টোকেন ("getClaimToken" প্রতিক্রিয়ার জন্য বাধ্যতামূলক, "শুরু", "সম্পূর্ণ", "বাতিল" এর জন্য বাদ দেওয়া হয়েছে)। |
claim_url | স্ট্রিং (ঐচ্ছিক) | রেজিস্ট্রেশন URL ("getClaimToken" প্রতিক্রিয়ার জন্য বাধ্যতামূলক, "শুরু", "সম্পূর্ণ", "বাতিল" এর জন্য বাদ দেওয়া হয়েছে)। ক্লাউড প্রিন্টারের জন্য এটি অবশ্যই সার্ভার থেকে প্রাপ্ত "complete_invite_url" হতে হবে। |
স্বয়ংক্রিয়_দাবি_ইউআরএল | স্ট্রিং (ঐচ্ছিক) | রেজিস্ট্রেশন URL ("getClaimToken" প্রতিক্রিয়ার জন্য বাধ্যতামূলক, "শুরু", "সম্পূর্ণ", "বাতিল" এর জন্য বাদ দেওয়া হয়েছে)। ক্লাউড প্রিন্টারের জন্য এটি অবশ্যই সার্ভার থেকে প্রাপ্ত "স্বয়ংক্রিয়_আমন্ত্রণ_ইউআরএল" হতে হবে। |
device_id | স্ট্রিং (ঐচ্ছিক) | নতুন ডিভাইস আইডি ("শুরু" প্রতিক্রিয়ার জন্য বাদ দেওয়া হয়েছে, "সম্পূর্ণ" এর জন্য বাধ্যতামূলক)। |
রেজিস্ট্রেশন সম্পূর্ণ হলেই ডিভাইসটিকে অবশ্যই /privet/info API প্রতিক্রিয়াতে তার ডিভাইস আইডি ফেরত দিতে হবে।
উদাহরণ 1:
{ "action": "start", "user": "user@domain.com", }
উদাহরণ 2:
{ "action": "getClaimToken", "user": "user@domain.com", "token": "AAA111222333444555666777", "claim_url": "https://domain.com/SoMeUrL", }
উদাহরণ 3:
{ "action": "complete", "user": "user@domain.com", "device_id": "11111111-2222-3333-4444-555555555555", }
4.3.3। ত্রুটি
/privet/register API নিম্নলিখিত ত্রুটিগুলি ফিরিয়ে দিতে পারে (বিশদ বিবরণের জন্য ত্রুটি বিভাগ দেখুন):ত্রুটি | বর্ণনা |
---|---|
ডিভাইস_ব্যস্ত | ডিভাইসটি ব্যস্ত এবং অনুরোধ করা ক্রিয়া সম্পাদন করতে পারে না৷ সময় শেষ হওয়ার পরে আবার চেষ্টা করুন। |
মুলতুবি_ব্যবহারকারী_ক্রিয়া | "getClaimToken" এর প্রতিক্রিয়াতে এই ত্রুটিটি নির্দেশ করে যে ডিভাইসটি এখনও ব্যবহারকারীর নিশ্চিতকরণের অপেক্ষায় রয়েছে এবং "getClaimToken" অনুরোধটি সময় শেষ হওয়ার পরে পুনরায় চেষ্টা করা উচিত। |
user_cancel | ব্যবহারকারী স্পষ্টভাবে ডিভাইস থেকে নিবন্ধীকরণ প্রক্রিয়া বাতিল. |
নিশ্চিতকরণ_সময় শেষ | ব্যবহারকারী নিশ্চিতকরণ সময় শেষ. |
অবৈধ_ক্রিয়া | অবৈধ কর্ম বলা হয়. উদাহরণস্বরূপ, যদি ক্লায়েন্ট কল করার আগে action=complete কল করে action=start এবং action=getClaimToken। |
invalid_params | অনুরোধে উল্লেখিত অবৈধ প্যারামিটার। (ভবিষ্যত সামঞ্জস্যের জন্য অজানা প্যারামিটার নিরাপদে উপেক্ষা করা উচিত)। উদাহরণস্বরূপ, যদি ক্লায়েন্ট অ্যাকশন=অজানা বা ব্যবহারকারী= বলে ডাকে তাহলে এটি ফেরত দিন। |
device_config_error | তারিখ/সময় (বা অন্য কিছু সেটিংস) ডিভাইসের দিকে ভুল। ব্যবহারকারীকে (ডিভাইসের অভ্যন্তরীণ ওয়েবসাইটে) যেতে হবে এবং ডিভাইস সেটিংস কনফিগার করতে হবে। |
অফলাইন | ডিভাইসটি বর্তমানে অফলাইনে রয়েছে এবং সার্ভারের সাথে কথা বলতে পারে না৷ |
সার্ভার_ত্রুটি | নিবন্ধন প্রক্রিয়া চলাকালীন সার্ভার ত্রুটি. |
invalid_x_privet_token | এক্স-প্রাইভেট-টোকেন অনুরোধে অবৈধ বা খালি। |
রেজিস্ট্রেশন সফলভাবে সম্পন্ন হওয়ার পর ডিভাইসটিকে অবশ্যই /privet/register API প্রকাশ করা বন্ধ করতে হবে। ডিভাইসটি /privet/register API প্রকাশ না করলে, এটি অবশ্যই HTTP 404 ত্রুটি ফেরত দেবে। অতএব, যদি একটি ডিভাইস ইতিমধ্যেই নিবন্ধিত থাকে, তাহলে এই API কল করলে অবশ্যই 404 ফেরত দিতে হবে। যদি X-Privet-Token হেডারটি অনুপস্থিত থাকে, তাহলে ডিভাইসটিকে HTTP 400 ত্রুটি ফেরাতে হবে।
4.4। /privet/accesstoken API
/privet/accesstoken API ঐচ্ছিক। এটি একটি HTTP GET অনুরোধ। /privet/accesstoken API একটি বৈধ "X-Privet-Token" শিরোনাম পরীক্ষা করতে হবে। ডিভাইসটিকে অবশ্যই "/privet/accesstoken" url-এ এই API প্রয়োগ করতে হবে:GET /privet/accesstoken HTTP/1.1
ডিভাইসটি যখন /accesstoken API কলটি গ্রহণ করে, তখন প্রদত্ত ব্যবহারকারীর জন্য অ্যাক্সেস টোকেন পুনরুদ্ধার করতে এবং ক্লায়েন্টকে টোকেন ফেরত দিতে সার্ভারকে কল করা উচিত। ক্লায়েন্ট তখন ক্লাউডের মাধ্যমে এই ডিভাইসটি অ্যাক্সেস করতে অ্যাক্সেস টোকেন ব্যবহার করবে।
ক্লাউড প্রিন্ট ডিভাইসগুলিকে অবশ্যই নিম্নলিখিত API কল করতে হবে:
/cloudprint/proximitytoken
"proximity_token": { "user": "user@domain.com", "token": "AAA111222333444555666777", "expires_in": 600 }
4.4.1। ইনপুট
/privet/accesstoken API-এর নিম্নলিখিত ইনপুট পরামিতি রয়েছে:নাম | মান |
---|---|
ব্যবহারকারী | এই অ্যাক্সেস টোকেনটি ব্যবহার করতে চান এমন ব্যবহারকারীর ইমেল৷ অনুরোধে খালি হতে পারে। |
4.4.2। প্রত্যাবর্তন
/privet/accesstoken API নিম্নলিখিত ডেটা প্রদান করে:মান নাম | মান প্রকার | বর্ণনা |
---|---|---|
টোকেন | স্ট্রিং | সার্ভার দ্বারা ফেরত অ্যাক্সেস টোকেন |
ব্যবহারকারী | স্ট্রিং | ইনপুট প্যারামিটারের মতো একই ব্যবহারকারী। |
মেয়াদ শেষ হয় | int | এই টোকেনের মেয়াদ শেষ না হওয়া পর্যন্ত সেকেন্ডের সংখ্যা। সার্ভার থেকে প্রাপ্ত এবং এই প্রতিক্রিয়া পাস. |
উদাহরণ:
{ "token": "AAA111222333444555666777", "user": "user@domain.com", "expires_in": 600 }
4.4.3। ত্রুটি
/privet/accesstoken API নিম্নলিখিত ত্রুটিগুলি ফিরিয়ে দিতে পারে (বিশদ বিবরণের জন্য ত্রুটি বিভাগ দেখুন):ত্রুটি | বর্ণনা |
---|---|
অফলাইন | ডিভাইসটি বর্তমানে অফলাইনে রয়েছে এবং সার্ভারের সাথে কথা বলতে পারে না৷ |
অ্যাক্সেস_অস্বীকৃত | অপর্যাপ্ত অধিকার। অ্যাক্সেস অস্বীকার করা হয়েছে৷ সার্ভার দ্বারা অনুরোধটি স্পষ্টভাবে অস্বীকার করা হলে ডিভাইসটিকে এই ত্রুটিটি ফেরত দেওয়া উচিত৷ |
invalid_params | অনুরোধে উল্লেখিত অবৈধ প্যারামিটার। (ভবিষ্যত সামঞ্জস্যের জন্য অজানা প্যারামিটার নিরাপদে উপেক্ষা করা উচিত)। উদাহরণস্বরূপ, যদি ক্লায়েন্ট /accesstoken?user= বা /accesstoken কল করে। |
সার্ভার_ত্রুটি | সার্ভার ত্রুটি. |
invalid_x_privet_token | এক্স-প্রাইভেট-টোকেন অনুরোধে অবৈধ বা খালি। |
ডিভাইসটি /privet/accesstoken API প্রকাশ না করলে, এটি অবশ্যই HTTP 404 ত্রুটি ফেরত দেবে। যদি X-Privet-Token হেডারটি অনুপস্থিত থাকে, তাহলে ডিভাইসটিকে HTTP 400 ত্রুটি ফেরাতে হবে।
4.5। /privet/ক্ষমতা API
/privet/ক্ষমতা API ঐচ্ছিক। এটি একটি HTTP GET অনুরোধ। /privet/capabilities API একটি বৈধ "X-Privet-Token" শিরোনাম পরীক্ষা করতে হবে। ডিভাইসটিকে অবশ্যই "/privet/capabilities" url-এ এই API প্রয়োগ করতে হবে:GET /privet/capabilities HTTP/1.1
4.5.1। ইনপুট
/privet/capabilities API-এর নিম্নলিখিত ইনপুট পরামিতি রয়েছে:নাম | মান |
---|---|
অফলাইন | (ঐচ্ছিক) শুধুমাত্র "অফলাইন=1" হতে পারে। এই ক্ষেত্রে ডিভাইসটিকে অফলাইন ব্যবহারের জন্য ক্ষমতা ফিরিয়ে দেওয়া উচিত (যদি সেগুলি "অনলাইন" ক্ষমতা থেকে আলাদা হয়)। |
4.5.2। প্রত্যাবর্তন
/privet/capabilities API ক্লাউড ডিভাইস বর্ণনা (CDD) JSON ফর্ম্যাটে ডিভাইসের ক্ষমতা প্রদান করে (বিশদ বিবরণের জন্য CDD নথি দেখুন)। ন্যূনতম প্রিন্টারদের এখানে সমর্থিত প্রকারের একটি তালিকা ফেরত দিতে হবে। উদাহরণস্বরূপ, বর্তমানে অনলাইনে থাকা একটি ক্লাউড রেডি প্রিন্টার এইরকম কিছু ফেরত দিতে পারে (ন্যূনতম):{ "version": "1.0", "printer": { "supported_content_type": [ { "content_type": "application/pdf", "min_version": "1.4" }, { "content_type": "image/pwg-raster" }, { "content_type": "image/jpeg" }, { "content_type": "*/*" } ] } }
{ "version": "1.0", "printer": { "supported_content_type": [ { "content_type": "application/pdf", "min_version": "1.4" }, { "content_type": "image/pwg-raster" }, { "content_type": "image/jpeg" } ] } }
দ্রষ্টব্য : প্রিন্টারগুলি অর্ডার ব্যবহার করে সমর্থিত বিষয়বস্তুর প্রকারের অগ্রাধিকার প্রকাশ করে। উদাহরণস্বরূপ, উপরের নমুনাগুলিতে, প্রিন্টারটি নির্দিষ্ট করে যে এটি "ইমেজ/পিডব্লিউজি-রাস্টার" এবং "ইমেজ/জেপিইজি" এর চেয়ে "অ্যাপ্লিকেশন/পিডিএফ" ডেটা পছন্দ করে। যদি সম্ভব হয় ক্লায়েন্টদের প্রিন্টার অগ্রাধিকারকে সম্মান করা উচিত (বিশদ বিবরণের জন্য CDD নথি দেখুন)।
4.5.3। ত্রুটি
/privet/capabilities API নিম্নলিখিত ত্রুটিগুলি ফিরিয়ে দিতে পারে (বিশদ বিবরণের জন্য ত্রুটি বিভাগ দেখুন):ত্রুটি | বর্ণনা |
---|---|
invalid_x_privet_token | এক্স-প্রাইভেট-টোকেন অনুরোধে অবৈধ বা খালি। |
ডিভাইসটি /privet/capabilities API প্রকাশ না করলে, এটি অবশ্যই HTTP 404 ত্রুটি ফেরত দেবে। যদি X-Privet-Token হেডারটি অনুপস্থিত থাকে, তাহলে ডিভাইসটিকে HTTP 400 ত্রুটি ফেরাতে হবে।
4.6। ত্রুটি
উপরের API গুলি থেকে নিম্নলিখিত বিন্যাসে ত্রুটিগুলি ফেরত দেওয়া হয়েছে:মান নাম | মান প্রকার | বর্ণনা |
---|---|---|
ত্রুটি | স্ট্রিং | ত্রুটির ধরন (এপিআই প্রতি সংজ্ঞায়িত) |
বর্ণনা | স্ট্রিং (ঐচ্ছিক) | ত্রুটির মানব পাঠযোগ্য বর্ণনা। |
সার্ভার_এপিআই | স্ট্রিং (ঐচ্ছিক) | সার্ভার ত্রুটির ক্ষেত্রে, এই ক্ষেত্রটিতে সার্ভার API রয়েছে যা ব্যর্থ হয়েছে। |
সার্ভার_কোড | int (ঐচ্ছিক) | সার্ভার ত্রুটির ক্ষেত্রে, এই ক্ষেত্রটিতে সেই ত্রুটি কোড রয়েছে যা সার্ভারটি ফেরত দিয়েছে। |
সার্ভার_http_code | int (ঐচ্ছিক) | সার্ভার HTTP ত্রুটির ক্ষেত্রে, এই ক্ষেত্রটিতে HTTP ত্রুটি কোড সার্ভার ফেরত রয়েছে। |
সময়সীমা | int (ঐচ্ছিক) | পুনরায় চেষ্টা করার আগে ক্লায়েন্টের অপেক্ষা করার জন্য সেকেন্ডের সংখ্যা (শুধুমাত্র পুনরুদ্ধারযোগ্য ত্রুটির জন্য)। ক্লায়েন্টকে এই মান থেকে প্রকৃত টাইমআউটকে র্যান্ডমাইজ করতে হবে + 20%। |
X-Privet-Token হেডার অনুপস্থিত থাকলে সমস্ত API-কে HTTP 400 ত্রুটি ফেরত দিতে হবে।
HTTP/1.1 400 অনুপস্থিত X-Privet-টোকেন হেডার।
উদাহরণ 1:
{ "error": "server_error", "description": "Service unavailable", "server_api": "/submit", "server_http_code": 503 }
উদাহরণ 2:
{ "error": "printer_busy", "description": "Printer is currently printing other job", "timeout": 15 }
5. প্রিন্টার API
এই প্রোটোকল সমর্থন করে এমন একটি ডিভাইসের ধরন হল টাইপ প্রিন্টার। এই ধরনের সমর্থনকারী ডিভাইসগুলি প্রিন্টারগুলির জন্য নির্দিষ্ট কিছু কার্যকারিতা প্রয়োগ করতে পারে। আদর্শভাবে, ক্লাউড-রেডি প্রিন্টারে মুদ্রণ একটি ক্লাউড প্রিন্ট সার্ভারের মাধ্যমে হবে:

কিছু ক্ষেত্রে একজন ক্লায়েন্টকে স্থানীয়ভাবে একটি নথি পাঠাতে হতে পারে। ক্লায়েন্টের Google ID না থাকলে বা ক্লাউড প্রিন্ট সার্ভারের সাথে কথা বলতে অক্ষম হলে এটির প্রয়োজন হতে পারে। এই ক্ষেত্রে, মুদ্রণ কাজ স্থানীয়ভাবে প্রিন্টারে জমা দেওয়া হবে। প্রিন্টার, পরিবর্তে, কাজের সারিবদ্ধকরণ এবং রূপান্তরের জন্য ক্লাউড প্রিন্ট পরিষেবা ব্যবহার করবে। প্রিন্টার ক্লাউড প্রিন্ট পরিষেবাতে স্থানীয়ভাবে জমা দেওয়া কাজটি পুনরায় পোস্ট করবে এবং তারপরে অনুরোধ করবে, যেহেতু এটি ক্লাউডের মাধ্যমে জমা দেওয়া হয়েছিল। এই প্রক্রিয়াটি পরিষেবা (রূপান্তর) এবং প্রিন্ট জব ম্যানেজমেন্ট/ট্র্যাকিংয়ের ক্ষেত্রে নমনীয় ব্যবহারকারীর অভিজ্ঞতা প্রদান করবে।

যেহেতু ক্লাউড প্রিন্ট পরিষেবা রূপান্তর প্রয়োগ করে, তাই প্রিন্টারকে সমর্থিত সামগ্রী প্রকারের তালিকার মধ্যে সমস্ত ইনপুট ফর্ম্যাট ("*/*") সমর্থন করে বিজ্ঞাপন দেওয়া উচিত:
{ "version": "1.0", "printer": { "supported_content_type": [ { "content_type": "image/pwg-raster" }, { "content_type": "*/*" } ] } }
কিছু ক্ষেত্রে একটি সম্পূর্ণ অফলাইন সমাধান কাঙ্ক্ষিত. যেহেতু প্রিন্টারগুলি সীমিত সংখ্যক ইনপুট ফর্ম্যাট সমর্থন করে, তাই একজন ক্লায়েন্টকে নথিগুলিকে কয়েকটি স্থানীয়ভাবে সমর্থিত প্রিন্টার ফর্ম্যাটে রূপান্তর করতে হবে।

অফলাইন প্রিন্টিং কেসের জন্য কমপক্ষে PWG রাস্টার ("image/pwg-raster") বিন্যাস সমর্থন করার জন্য এই বৈশিষ্ট্যটির জন্য সমস্ত প্রিন্টার প্রয়োজন৷ একটি প্রিন্টার অন্যান্য ফরম্যাট (উদাহরণস্বরূপ JPEG) সমর্থন করতে পারে এবং যদি একটি ক্লায়েন্ট এটি সমর্থন করে, তাহলে এটি সেই বিন্যাসে নথি পাঠাতে পারে। প্রিন্টারকে অবশ্যই / সক্ষমতা API এর মাধ্যমে সমর্থিত প্রকারগুলি প্রকাশ করতে হবে, উদাহরণস্বরূপ:
{ "version": "1.0", "printer": { "supported_content_type": [ { "content_type": "image/pwg-raster" }, { "content_type": "image/jpeg" } ] } }
সহজ মুদ্রণ - ক্লায়েন্ট স্থানীয় নেটওয়ার্কের মাধ্যমে নথিটি /submitdoc API এ পাঠায় (job_id প্যারামিটার নির্দিষ্ট না করে)। জমা দেওয়া নথিটি ডিফল্ট প্রিন্ট টিকিট সেটিংস ব্যবহার করে প্রিন্ট করা হবে এবং কোনো প্রিন্ট কাজের অবস্থার প্রয়োজন নেই। যদি প্রিন্টার শুধুমাত্র এই ধরনের মুদ্রণ সমর্থন করে, তাহলে এটি অবশ্যই /privet/info API প্রতিক্রিয়াতে শুধুমাত্র /submitdoc API-এর বিজ্ঞাপন দিতে হবে।
"api": [ "/privet/accesstoken", "/privet/capabilities", "/privet/printer/submitdoc", ]
অ্যাডভান্সড প্রিন্টিং - ক্লায়েন্টকে প্রথমে অনুরোধে একটি বৈধ CJT চাকরির টিকিট সহ /privet/printer/createjob API এ কল করে প্রিন্টারে একটি প্রিন্ট কাজ তৈরি করতে হবে। প্রিন্টারকে অবশ্যই প্রিন্ট টিকিট মেমরিতে সংরক্ষণ করতে হবে এবং ক্লায়েন্টকে একটি job_id ফেরত দিতে হবে। তারপর ক্লায়েন্ট /printer/submitdoc API এ কল করবে এবং পূর্বে প্রাপ্ত job_id উল্লেখ করবে। সেই সময়ে প্রিন্টারটি মুদ্রণ শুরু করবে। ক্লায়েন্ট /privet/printer/jobstate API এ কল করে প্রিন্ট কাজের অবস্থার জন্য প্রিন্টারকে পোল করবে।
একটি মাল্টি-ক্লায়েন্ট পরিবেশে, এই APIটি কীভাবে বলা হবে তার কোন গ্যারান্টি নেই। একজন ক্লায়েন্টের পক্ষে অন্য ক্লায়েন্টের /createjob->/submitdoc কলগুলির মধ্যে /createjob-কে কল করা সম্ভব। সম্ভাব্য অচলাবস্থা দূর করতে এবং ব্যবহারযোগ্যতা উন্নত করতে, আমরা প্রিন্টারে (অন্তত 3-5টি) মুলতুবি থাকা প্রিন্ট কাজের একটি ছোট সারি রাখার সুপারিশ করেছি:
- /createjob সারিতে প্রথম উপলব্ধ স্থান নেয়।
- চাকরির জীবনকাল (সারিতে) কমপক্ষে 5 মিনিট।
- যদি সারির সমস্ত দাগ নেওয়া হয়, তবে সবচেয়ে পুরানো, অ-মুদ্রণ কাজটি সরিয়ে দেওয়া হবে এবং সেখানে একটি নতুন স্থাপন করা হবে।
- যদি ডিভাইসে বর্তমানে প্রিন্ট করার জন্য একটি মুদ্রণ কাজ থাকে (সরল বা উন্নত মুদ্রণ), /submitdoc-কে ব্যস্ত স্থিতি ফিরিয়ে দিতে হবে এবং এই মুদ্রণের কাজটি পুনরায় চেষ্টা করার জন্য একটি সময়সীমার প্রস্তাব করা উচিত।
- যদি /submitdoc একটি কাজের উল্লেখ করে যা সারি থেকে সরানো হয়েছে (প্রতিস্থাপন বা টাইমআউটের কারণে), প্রিন্টারটিকে একটি ত্রুটি ফেরত দেওয়া উচিত invalid_print_job এবং ক্লায়েন্ট /createjob ধাপ থেকে প্রক্রিয়াটি পুনরায় চেষ্টা করবে। পুনরায় চেষ্টা করার আগে ক্লায়েন্টকে অবশ্যই 5 সেকেন্ড পর্যন্ত র্যান্ডম টাইমআউট সময়ের জন্য অপেক্ষা করতে হবে।
যদি মেমরির সীমাবদ্ধতা ডিভাইসে একাধিক মুলতুবি কাজ সংরক্ষণ করতে বাধা দেয়, তাহলে 1টি প্রিন্ট কাজের দীর্ঘ সারি থাকা সম্ভব। এটি এখনও উপরের মত একই প্রোটোকল অনুসরণ করা উচিত। একটি কাজ সম্পূর্ণ বা ত্রুটি সহ ব্যর্থ হওয়ার পরে, প্রিন্টারটি কমপক্ষে 5 মিনিটের জন্য কাজের স্থিতি সম্পর্কে তথ্য সংরক্ষণ করা উচিত। সমাপ্ত কাজের স্থিতি সংরক্ষণের জন্য সারির আকার কমপক্ষে 10 হওয়া উচিত। যদি আরও বেশি চাকরির স্ট্যাটাস সংরক্ষণ করা প্রয়োজন হয়, তবে 5 মিনিটের সময় শেষ হওয়ার আগে সারির থেকে সবচেয়ে পুরানোটি সরানো যেতে পারে।
দ্রষ্টব্য: আপাতত ক্লায়েন্টরা চাকরির অবস্থার জন্য পোল করবে। ভবিষ্যতে, কোনো প্রিন্ট কাজের স্থিতি পরিবর্তিত হলে আমাদের প্রিন্টারকে TXT DNS বিজ্ঞপ্তি পাঠানোর প্রয়োজন হতে পারে।
5.1। /privet/printer/createjob API
/privet/printer/createjob API হল ঐচ্ছিক (উপরে সহজ মুদ্রণ দেখুন)। এটি একটি HTTP POST অনুরোধ। /privet/printer/createjob API একটি বৈধ "X-Privet-Token" শিরোনাম পরীক্ষা করতে হবে। ডিভাইসটিকে অবশ্যই "/privet/printer/createjob" url-এ এই API প্রয়োগ করতে হবে:
POST /privet/printer/createjob HTTP/1.1
5.1.1। ইনপুট
/প্রাইভেট/প্রিন্টার/ক্রিয়েটজব এপিআইয়ের ইউআরএল -তে কোনও ইনপুট পরামিতি নেই। অনুরোধ বডিটিতে সিজেটি ফর্ম্যাটে মুদ্রণ কাজের টিকিটের ডেটা থাকা উচিত।5.1.2। প্রত্যাবর্তন
/প্রাইভেট/প্রিন্টার/ক্রিয়েটজব এপিআই নিম্নলিখিত ডেটা ফেরত দেয়:মান নাম | মান প্রকার | বর্ণনা |
---|---|---|
job_id | স্ট্রিং | সদ্য নির্মিত মুদ্রণ কাজের আইডি। |
মেয়াদ শেষ হয় | int | এই মুদ্রণ কাজটি সেকেন্ডের সংখ্যা বৈধ। |
উদাহরণ:
{ "job_id": "123", "expires_in": 600 }
5.1.3। ত্রুটি
/প্রাইভেট/প্রিন্টার/ক্রিয়েটজব এপিআই নিম্নলিখিত ত্রুটিগুলি ফিরিয়ে দিতে পারে (বিশদগুলির জন্য ত্রুটি বিভাগ দেখুন):ত্রুটি | বর্ণনা |
---|---|
অবৈধ_টিকেট | জমা দেওয়া মুদ্রণ টিকিট অবৈধ। |
প্রিন্টার_ বুসি | প্রিন্টার ব্যস্ত এবং বর্তমানে প্রক্রিয়া /ক্রিয়েটজব করতে পারে না। সময়সীমা পরে আবার চেষ্টা করুন। |
প্রিন্টার_রর | প্রিন্টারটি ত্রুটিযুক্ত অবস্থায় রয়েছে এবং এটি ঠিক করার জন্য ব্যবহারকারীর ইন্টারঅ্যাকশন প্রয়োজন। বিবরণে আরও বিস্তারিত ব্যাখ্যা থাকা উচিত (যেমন "ট্রে 1 এ কাগজ জ্যাম")। |
অবৈধ_এক্স_প্রিভেট_টোকেন | এক্স-প্রাইভেট-টোকেন অনুরোধে অবৈধ বা খালি। |
যদি ডিভাইসটি এক্সপোজিং/প্রাইভেট/প্রিন্টার/ক্রিয়েটজব না হয় তবে এটি অবশ্যই এইচটিটিপি 404 ত্রুটিটি ফেরত দিতে হবে। যদি এক্স-প্রাইভেট-টোকেন শিরোনাম অনুপস্থিত থাকে তবে ডিভাইসটি অবশ্যই এইচটিটিপি 400 ত্রুটি ফিরিয়ে দিতে হবে।
5.2। /প্রাইভেট/প্রিন্টার/সাবমিটডোক এপিআই
/প্রাইভেট/প্রিন্টার/সাবমিটডোক এপিআই একটি স্থানীয় নেটওয়ার্কের মাধ্যমে মুদ্রণ প্রয়োগ করতে প্রয়োজন (অফলাইন বা ক্লাউড প্রিন্টে পুনরায় পোস্ট করুন)। এটি একটি এইচটিটিপি পোস্টের অনুরোধ। /প্রাইভেট/প্রিন্টার/সাবমিটডোক এপিআই অবশ্যই একটি বৈধ "এক্স-প্রাইভেট-টোকেন" শিরোনাম পরীক্ষা করতে হবে। ডিভাইসটিকে অবশ্যই এই এপিআই প্রয়োগ করতে হবে "/প্রাইভেট/প্রিন্টার/সাবমিটডোক" ইউআরএল:POST /privet/printer/submitdoc HTTP/1.1
প্রিন্টার যদি তার অভ্যন্তরীণ বাফারে সমস্ত ডেটা ধরে রাখতে সক্ষম না হয় তবে এটি ডকুমেন্টের একটি অংশ মুদ্রণ না করা পর্যন্ত ডেটা স্থানান্তরকে ধীর করতে টিসিপি প্রক্রিয়া ব্যবহার করা উচিত, বাফারের অংশটি আবার উপলভ্য করে। (উদাহরণস্বরূপ, প্রিন্টারটি টিসিপি স্তরগুলিতে উইন্ডোজাইজ = 0 সেট করতে পারে, যা ক্লায়েন্টকে অপেক্ষা করবে))
প্রিন্টারে একটি নথি জমা দিতে উল্লেখযোগ্য সময় নিতে পারে। প্রিন্টিংয়ের অগ্রগতিতে ক্লায়েন্টের প্রিন্টারের অবস্থা এবং কাজের (উন্নত মুদ্রণ) পরীক্ষা করতে সক্ষম হওয়া উচিত। এটি করার জন্য, প্রিন্টারটিকে অবশ্যই ক্লায়েন্টকে/প্রাইভেট/তথ্য এবং/প্রাইভেট/প্রিন্টার/জবস্টেট এপিআইগুলিকে কল করার অনুমতি দিতে হবে যখন প্রক্রিয়াজাতকরণ/প্রাইভেট/প্রিন্টার/সাবমিটডোক এপিআই কলগুলি। সমস্ত ক্লায়েন্টদের/প্রাইভেট/প্রিন্টার/সাবমিটডোক এপিআই কলটি কার্যকর করতে একটি নতুন থ্রেড শুরু করার জন্য এটি সুপারিশ করা হয়, যাতে মূল থ্রেডটি প্রিন্টার এবং জব স্টেটগুলি চেক করতে/প্রাইভেট/তথ্য এবং/প্রাইভেট/প্রিন্টার/জবস্টেট এপিআই ব্যবহার করতে পারে।
দ্রষ্টব্য : স্থানীয় মুদ্রণ কাজের সমাপ্তি বা গর্ভপাতের পরে, অ্যাকাউন্টিং এবং ব্যবহারকারীর অভিজ্ঞতার উদ্দেশ্যে /ক্লাউডপ্রিন্ট /জমা দেওয়া ইন্টারফেসে কাজের চূড়ান্ত অবস্থার প্রতিবেদন করার জন্য এটি দৃ strongly ়ভাবে প্রস্তাবিত (এবং এই স্পেসের ভবিষ্যতের সংস্করণে প্রয়োজন হবে)। "প্রিন্টেরিড", "শিরোনাম", "কন্টেন্টটাইপ" এবং "ফাইনাল_সেম্যান্টিক_স্টেট" ( প্রিন্টজবস্টেট ফর্ম্যাটে) প্যারামিটারগুলি প্রয়োজনীয়, এবং প্যারামিটারগুলি "ট্যাগ" (পুনরাবৃত্তি প্যারামিটার) এবং "টিকিট" ( ক্লাউডজোবটিকেট ফর্ম্যাটে কাজের টিকিট)। নোট করুন যে প্রদত্ত প্রিন্টজবস্টেট অবশ্যই চূড়ান্ত হতে হবে, অর্থাত্ এর ধরণটি অবশ্যই করা বা বাতিল করা উচিত এবং এটি বাতিল হওয়ার ক্ষেত্রে অবশ্যই একটি কারণ সরবরাহ করতে হবে (বিশদগুলির জন্য জবস্টেট দেখুন)। এছাড়াও নোট করুন যে স্থানীয় মুদ্রণ কাজের প্রতিবেদনের জন্য /ক্লাউডপ্রিন্ট /জমা দেওয়া ইন্টারফেসের এই ব্যবহারটি এর স্পেসিফিকেশনে উল্লেখ করা হয়নি কারণ সেই বিভাগটি ইন্টারফেসের প্রাথমিক ব্যবহার বর্ণনা করার উদ্দেশ্যে: "সামগ্রী" প্যারামিটারে সরবরাহিত প্রিন্টে ডকুমেন্টের সাথে একটি মুদ্রণ কাজ জমা দেওয়া।
5.2.1। ইনপুট
/প্রাইভেট/প্রিন্টার/সাবমিটডোক এপিআইয়ের নিম্নলিখিত ইনপুট পরামিতি রয়েছে:নাম | মান |
---|---|
job_id | (al চ্ছিক) প্রিন্ট জব আইডি। সাধারণ মুদ্রণ কেসের জন্য বাদ দেওয়া যেতে পারে (উপরে দেখুন)। প্রিন্টার দ্বারা ফিরে আসা একটির সাথে অবশ্যই মিলবে। |
user_name | (al চ্ছিক) মানব পাঠযোগ্য ব্যবহারকারীর নাম। এটি সুনির্দিষ্ট নয়, এবং কেবল মুদ্রণ কাজের টীকাগুলির জন্য ব্যবহার করা উচিত। যদি জব ক্লাউড প্রিন্ট পরিষেবাতে পুনরায় পোস্ট করা হয় তবে এই স্ট্রিংটি ক্লাউড প্রিন্ট কাজের সাথে সংযুক্ত করা উচিত। |
ক্লায়েন্ট_নাম | (al চ্ছিক) ক্লায়েন্ট অ্যাপ্লিকেশনটির নাম এই অনুরোধটি করে। শুধুমাত্র প্রদর্শনের উদ্দেশ্যে। যদি জব ক্লাউড প্রিন্ট পরিষেবাতে পুনরায় পোস্ট করা হয় তবে এই স্ট্রিংটি ক্লাউড প্রিন্ট কাজের সাথে সংযুক্ত করা উচিত। |
চাকরির_নাম | (al চ্ছিক) রেকর্ড করা প্রিন্ট কাজের নাম। যদি জব ক্লাউড প্রিন্ট পরিষেবাতে পুনরায় পোস্ট করা হয় তবে এই স্ট্রিংটি ক্লাউড প্রিন্ট কাজের সাথে সংযুক্ত করা উচিত। |
অফলাইন | (al চ্ছিক) কেবল "অফলাইন = 1" হতে পারে। এক্ষেত্রে প্রিন্টারের কেবল অফলাইন মুদ্রণের চেষ্টা করা উচিত (ক্লাউড প্রিন্ট সার্ভারের কোনও পুনরায় পোস্ট নেই)। |
অনুরোধ বডিতে মুদ্রণের জন্য একটি বৈধ নথি থাকা উচিত। "সামগ্রী-দৈর্ঘ্য" এর অনুরোধের সঠিক দৈর্ঘ্য অন্তর্ভুক্ত করা উচিত। "কন্টেন্ট-টাইপ" শিরোনামটি এমআইএম টাইপ ডকুমেন্ট করতে এবং সিডিডি-র একটি প্রকারের সাথে মেলে (সিডিডি যদি না থাকে তবে "*/*" ") সেট করা উচিত।
ক্লায়েন্টদের এই অনুরোধ সহ একটি বৈধ ব্যবহারকারীর নাম (বা ইমেল), একটি ক্লায়েন্টের নাম এবং একটি কাজের নাম সরবরাহ করার জন্য সুপারিশ করা হয়। এই ক্ষেত্রগুলি কেবল ইউআইএসে ব্যবহারকারীর অভিজ্ঞতা উন্নত করতে ব্যবহৃত হয়।
5.2.2। প্রত্যাবর্তন
/প্রাইভেট/প্রিন্টার/সাবমিটডোক এপিআই নিম্নলিখিত ডেটাগুলি ফেরত দেয়:মান নাম | মান প্রকার | বর্ণনা |
---|---|---|
job_id | স্ট্রিং | সদ্য নির্মিত প্রিন্ট কাজের আইডি (সাধারণ মুদ্রণ) বা অনুরোধে নির্দিষ্ট করা জব_আইডি (অ্যাডভান্সড প্রিন্টিং)। |
মেয়াদ শেষ হয় | int | এই মুদ্রণ কাজটি সেকেন্ডের সংখ্যা বৈধ। |
কাজের_টাইপ | স্ট্রিং | জমা দেওয়া নথির বিষয়বস্তু টাইপ। |
জব_সাইজ | int 64 বিট | বাইটে মুদ্রণ ডেটার আকার। |
চাকরির_নাম | স্ট্রিং | (al চ্ছিক) ইনপুট হিসাবে একই কাজের নাম (যদি থাকে)। |
উদাহরণ:
{ "job_id": "123", "expires_in": 500, "job_type": "application/pdf", "job_size": 123456, "job_name": "My PDF document" }
5.2.3। ত্রুটি
/প্রাইভেট/প্রিন্টার/সাবমিটডোক এপিআই নিম্নলিখিত ত্রুটিগুলি ফিরিয়ে দিতে পারে (বিশদগুলির জন্য ত্রুটি বিভাগ দেখুন):ত্রুটি | বর্ণনা |
---|---|
অবৈধ_প্রিন্ট_জব | অনুরোধে অবৈধ/মেয়াদোত্তীর্ণ জব আইডি নির্দিষ্ট করা আছে। সময়সীমা পরে আবার চেষ্টা করুন। |
অবৈধ_ডোকামেন্ট_ টাইপ | ডকুমেন্ট মাইম-টাইপ প্রিন্টার দ্বারা সমর্থিত নয়। |
অবৈধ_ডোকামেন্ট | জমা দেওয়া নথি অবৈধ। |
ডকুমেন্ট_টু_লার্জ | ডকুমেন্ট অনুমোদিত সর্বাধিক আকার ছাড়িয়ে গেছে। |
প্রিন্টার_ বুসি | প্রিন্টার ব্যস্ত এবং বর্তমানে ডকুমেন্ট প্রক্রিয়া করতে পারে না। সময়সীমা পরে আবার চেষ্টা করুন। |
প্রিন্টার_রর | প্রিন্টারটি ত্রুটিযুক্ত অবস্থায় রয়েছে এবং এটি ঠিক করার জন্য ব্যবহারকারীর ইন্টারঅ্যাকশন প্রয়োজন। বিবরণে আরও বিস্তারিত ব্যাখ্যা থাকা উচিত (যেমন "ট্রে 1 এ কাগজ জ্যাম")। |
অবৈধ_প্যারামস | অনুরোধে নির্দিষ্ট অবৈধ পরামিতি। (অজানা পরামিতিগুলি ভবিষ্যতের সামঞ্জস্যের জন্য নিরাপদে উপেক্ষা করা উচিত) |
ব্যবহারকারী_ক্যানসেল | ব্যবহারকারী স্পষ্টভাবে ডিভাইস থেকে মুদ্রণ প্রক্রিয়া বাতিল করেছেন। |
সার্ভার_ত্রুটি | ক্লাউড প্রিন্টে নথি পোস্ট করা ব্যর্থ হয়েছে। |
অবৈধ_এক্স_প্রিভেট_টোকেন | এক্স-প্রাইভেট-টোকেন অনুরোধে অবৈধ বা খালি। |
যদি ডিভাইসটি এক্সপোজিং/প্রাইভেট/প্রিন্টার/সাবমিটডোক না করে থাকে তবে এটি অবশ্যই এইচটিটিপি 404 ত্রুটি ফিরিয়ে দিতে হবে। যদি এক্স-প্রাইভেট-টোকেন শিরোনাম অনুপস্থিত থাকে তবে ডিভাইসটি অবশ্যই এইচটিটিপি 400 ত্রুটি ফিরিয়ে দিতে হবে।
দ্রষ্টব্য :/প্রাইভেট/প্রিন্টার/সাবমিটডোক এপিআইয়ের প্রিন্টার সাইডে বিশেষ হ্যান্ডলিংয়ের প্রয়োজন হতে পারে (বড় পে -লোড সংযুক্ত থাকার কারণে)। কিছু ক্ষেত্রে (প্রিন্টার এইচটিটিপি সার্ভার বাস্তবায়ন এবং প্ল্যাটফর্মের উপর নির্ভর করে), প্রিন্টার এইচটিটিপি ত্রুটি ফিরিয়ে দেওয়ার আগে সকেট বন্ধ করতে পারে। অন্যটিতে, প্রিন্টার 503 ত্রুটি (প্রাইভেট ত্রুটির পরিবর্তে) ফিরিয়ে দিতে পারে। প্রিন্টারের প্রাইভেট ফিরে আসার জন্য যথাসম্ভব চেষ্টা করা উচিত। তবে, প্রতিটি ক্লায়েন্ট প্রাইভেট স্পেসিফিকেশন বাস্তবায়নকারী সকেটটি/প্রাইভেট/প্রিন্টার/সাবমিটডোক এপিআইয়ের জন্য সকেট ক্লোজ (কোনও এইচটিটিপি ত্রুটি নেই) এবং 503 এইচটিটিপি ত্রুটির ক্ষেত্রে পরিচালনা করতে সক্ষম হওয়া উচিত। এই ক্ষেত্রে, ক্লায়েন্টকে "টাইমআউট" এর সাথে 15 সেকেন্ডে সেট করে একটি প্রাইভেট "প্রিন্টার_ বুসি" ত্রুটি হিসাবে এটি পরিচালনা করা উচিত। অসীম পুনরুদ্ধার এড়াতে, ক্লায়েন্ট যুক্তিসঙ্গত সংখ্যক প্রচেষ্টার পরে পুনরায় চেষ্টা করা বন্ধ করতে পারে (উদাহরণস্বরূপ, 3)।
5.3। /প্রাইভেট/প্রিন্টার/জবস্টেট এপিআই
/প্রাইভেট/প্রিন্টার/জবস্টেট এপিআই al চ্ছিক (উপরে সাধারণ মুদ্রণ দেখুন)। এটি একটি এইচটিটিপি জিইটি অনুরোধ। /প্রাইভেট/প্রিন্টার/জবস্টেট এপিআই অবশ্যই একটি বৈধ "এক্স-প্রাইভেট-টোকেন" শিরোনাম পরীক্ষা করতে হবে। ডিভাইসটিকে অবশ্যই এই এপিআই "/প্রাইভেট/প্রিন্টার/জবস্টেট" ইউআরএল প্রয়োগ করতে হবে:GET /privet/printer/jobstate HTTP/1.1
5.3.1। ইনপুট
/প্রাইভেট/প্রিন্টার/জবস্টেট এপিআইতে ইনপুট পরামিতিগুলি নিম্নলিখিত রয়েছে:নাম | মান |
---|---|
job_id | জন্য ফিরে আসার জন্য কাজের আইডি মুদ্রণ করুন। |
5.3.2। প্রত্যাবর্তন
/প্রাইভেট/প্রিন্টার/জবস্টেট এপিআই নিম্নলিখিত ডেটা প্রদান করে:মান নাম | মান প্রকার | বর্ণনা |
---|---|---|
job_id | স্ট্রিং | প্রিন্ট জব আইডি সেখানে স্থিতি সম্পর্কিত তথ্য। |
রাষ্ট্র | স্ট্রিং | খসড়া - প্রিন্ট জব ডিভাইসে তৈরি করা হয়েছে (কোনও/প্রাইভেট/প্রিন্টার/সাবমিটডোক কল এখনও প্রাপ্ত হয়েছে)। কুইউড - প্রিন্ট জব গ্রহণ করা হয়েছে এবং সারি করা হয়েছে, তবে মুদ্রণ এখনও শুরু হয়নি। in_progress - মুদ্রণের কাজ মুদ্রণের অগ্রগতিতে রয়েছে। থামানো - মুদ্রণ কাজটি বিরতি দেওয়া হয়েছে, তবে ম্যানুয়ালি বা স্বয়ংক্রিয়ভাবে পুনরায় চালু করা যেতে পারে। সম্পন্ন - মুদ্রণ কাজ সম্পন্ন হয়। বাতিল - মুদ্রণ কাজ ব্যর্থ। |
বর্ণনা | স্ট্রিং | (al চ্ছিক) মুদ্রণ কাজের স্থিতির মানব পঠনযোগ্য বিবরণ। রাজ্য < বন্ধ বা বাতিল করা হলে অতিরিক্ত তথ্য অন্তর্ভুক্ত করা উচিত। শব্দার্থক_স্টেট ক্ষেত্রটি সাধারণত ক্লায়েন্টকে আরও ভাল এবং আরও অর্থবহ বর্ণনা সরবরাহ করে। |
মেয়াদ শেষ হয় | int | এই মুদ্রণ কাজটি সেকেন্ডের সংখ্যা বৈধ। |
কাজের_টাইপ | স্ট্রিং | (al চ্ছিক) জমা দেওয়া নথির সামগ্রী-প্রকার। |
জব_সাইজ | int 64 বিট | (al চ্ছিক) বাইটে মুদ্রণ ডেটার আকার। |
চাকরির_নাম | স্ট্রিং | (al চ্ছিক) ইনপুট হিসাবে একই কাজের নাম (যদি থাকে)। |
সার্ভার_জব_আইডি | স্ট্রিং | (al চ্ছিক) কাজের আইডি সার্ভার থেকে ফিরে এসেছে (যদি ক্লাউড প্রিন্ট পরিষেবাতে কাজ পোস্ট করা হয়)। অফলাইন মুদ্রণের জন্য বাদ দেওয়া হয়েছে। |
শব্দার্থক_স্টেট | JSON | (al চ্ছিক) প্রিন্টজবস্টেট ফর্ম্যাটে কাজের শব্দার্থক অবস্থা। |
উদাহরণ (ক্লাউড প্রিন্টের মাধ্যমে প্রতিবেদন করে মুদ্রণ):
{ "job_id": "123", "state": "in_progress", "expires_in": 100, "job_type": "application/pdf", "job_size": 123456, "job_name": "My PDF document", "server_job_id": "1111-2222-3333-4444" }
উদাহরণ (অফলাইন মুদ্রণ ত্রুটি):
{ "job_id": "123", "state": "stopped", "description": "Out of paper", "expires_in": 100, "job_type": "application/pdf", "job_size": 123456, "job_name": "My PDF document" }
উদাহরণ (ব্যবহারকারী দ্বারা বাতিল করা মুদ্রণ কাজ):
{ "job_id": "123", "state": "aborted", "description": "User action", "expires_in": 100, "job_type": "application/pdf", "job_size": 123456, "job_name": "My PDF document", "semantic_state": { "version": "1.0", "state": { "type": "ABORTED", "user_action_cause": {"action_code": "CANCELLED"} }, "pages_printed": 7 } }
উদাহরণ (কাগজের বাইরে কারণে মুদ্রণ কাজ বন্ধ হয়ে গেছে)। ডিভাইস অবস্থার রেফারেন্সটি লক্ষ্য করুন। ডিভাইসের অবস্থা সম্পর্কে আরও বিশদ পেতে ক্লায়েন্টকে /প্রাইভেট /তথ্য এপিআই কল করতে হবে:
{ "job_id": "123", "state": "stopped", "description": "Out of paper", "expires_in": 100, "job_type": "application/pdf", "job_size": "123456", "job_name": "My PDF document", "semantic_state": { "version": "1.0", "state": { "type": "STOPPED", "device_state_cause": {"error_code": "INPUT_TRAY"} }, "pages_printed": 7 } }
5.3.3। ত্রুটি
/প্রাইভেট/প্রিন্টার/জবস্টেট এপিআই নিম্নলিখিত ত্রুটিগুলি ফিরিয়ে দিতে পারে (বিশদগুলির জন্য ত্রুটি বিভাগ দেখুন):ত্রুটি | বর্ণনা |
---|---|
অবৈধ_প্রিন্ট_জব | অনুরোধে অবৈধ/মেয়াদোত্তীর্ণ জব আইডি নির্দিষ্ট করা আছে। |
সার্ভার_ত্রুটি | মুদ্রণ কাজের স্থিতি পেতে (ক্লাউড প্রিন্টে পোস্ট করা মুদ্রণ কাজের জন্য) ব্যর্থ হয়েছে। |
অবৈধ_এক্স_প্রিভেট_টোকেন | এক্স-প্রাইভেট-টোকেন অনুরোধে অবৈধ বা খালি। |
যদি ডিভাইসটি এক্সপোজিং/প্রাইভেট/প্রিন্টার/জবস্টেট না হয় তবে এটি অবশ্যই এইচটিটিপি 404 ত্রুটিটি ফিরিয়ে দিতে হবে। যদি এক্স-প্রাইভেট-টোকেন শিরোনাম অনুপস্থিত থাকে তবে ডিভাইসটি অবশ্যই এইচটিটিপি 400 ত্রুটি ফিরিয়ে দিতে হবে।
6. পরিশিষ্ট
6.1। ডিফল্ট আচরণ এবং সেটিংস
এই বিভাগটি সমস্ত প্রাইভেট-সামঞ্জস্যপূর্ণ ডিভাইস থেকে আমরা যে ডিফল্ট আচরণ আশা করি তা ব্যাখ্যা করবে।- আউট-অফ-বক্স ডিভাইসগুলিতে কেবল /প্রাইভেট /তথ্য এবং /প্রাইভেট /নিবন্ধিত এপিআইগুলিকে সমর্থন করা উচিত। অন্যান্য সমস্ত এপিআই (যেমন /প্রাইভেট /অ্যাক্সেসটোকেন, স্থানীয় মুদ্রণ) অক্ষম করা উচিত।
- নিবন্ধকরণের জন্য একটি ডিভাইসের সাথে শারীরিক মিথস্ক্রিয়া প্রয়োজন।
- ডিভাইসে তাদের অ্যাক্সেস নিশ্চিত করতে ব্যবহারকারীকে অবশ্যই ডিভাইসে একটি শারীরিক পদক্ষেপ নিতে হবে (যেমন, একটি বোতাম টিপছে)।
- ব্যবহারকারী উপরে উল্লিখিত ক্রিয়াটি গ্রহণ করার পরে, প্রিন্টারে /ক্লাউডপ্রিন্ট /রেজিস্টার অনুরোধটি প্রেরণ করা উচিত। ক্রিয়াটি গ্রহণ না হওয়া পর্যন্ত এটি এই অনুরোধটি প্রেরণ করা উচিত নয় (সিকোয়েন্স ডায়াগ্রাম 1 দেখুন)।
- যদি ডিভাইসটি এ /প্রাইভেট /রেজিস্টার অনুরোধটি প্রক্রিয়াজাত করে (উদাহরণস্বরূপ, উপরের ক্রিয়াটির জন্য অপেক্ষা করছে), এটি অবশ্যই অন্যান্য সমস্ত /প্রাইভেট /রেজিস্টার অনুরোধগুলি প্রত্যাখ্যান করতে হবে। এই ক্ষেত্রে ডিভাইসটি অবশ্যই ডিভাইস_ বুসি ত্রুটিটি ফিরিয়ে দিতে হবে।
- ডিভাইসের যে কোনও /নিবন্ধনের অনুরোধের সময়সীমা উচিত যা 60 সেকেন্ডের মধ্যে উপরে উল্লিখিত শারীরিক ক্রিয়া গ্রহণ করে না। ডিভাইসটি অবশ্যই এই ক্ষেত্রে নিশ্চিতকরণ_টাইমআউট ত্রুটিটি ফিরিয়ে দিতে হবে।
- Ption চ্ছিক: প্রস্তাবিত তবে প্রয়োজনীয় নয়, নিম্নলিখিতগুলি ব্যবহারকারীর অভিজ্ঞতা উন্নত করতে পারে:
- প্রিন্টারটি একটি আলো বা তার স্ক্রিনটি ফ্ল্যাশ করতে পারে যাতে এটি নির্দেশ করতে পারে যে ব্যবহারকারীকে নিবন্ধকরণ নিশ্চিত করতে কোনও পদক্ষেপ নেওয়া দরকার।
- প্রিন্টারটি তার স্ক্রিনে বলতে পারে যে 'এটি ব্যবহারকারী' abc@def.com 'এর জন্য গুগল ক্লাউড প্রিন্টে নিবন্ধিত হচ্ছে - ওকে টিপুন টিপুন', যেখানে abc@def.com /রেজিস্টার এপিআই কল থেকে ব্যবহারকারী প্যারামিটার। এটি কোনও ব্যবহারকারীর কাছে এটি আরও পরিষ্কার করে দেবে যা:
- এটি তাদের নিবন্ধকরণের অনুরোধ যে তারা নিশ্চিত করছে
- যদি সে অনুরোধটি ট্রিগার না করে তবে কী ঘটছে।
- প্রিন্টার থেকে নিশ্চিত করার জন্য একটি শারীরিক ক্রিয়া ছাড়াও (যেমন, 'ওকে বোতাম টিপুন'), একটি প্রিন্টার ব্যবহারকারীকে অনুরোধটি বাতিল করার জন্য একটি বোতামও সরবরাহ করতে পারে (যেমন, 'প্রত্যাখ্যান করতে বাতিল করুন')। এটি 60০ দ্বিতীয় সময়সীমার আগে এটি বাতিল করার জন্য নিবন্ধকরণের অনুরোধটি ট্রিগার না করে এমন ব্যবহারকারীদের অনুমতি দেবে। ডিভাইসটি অবশ্যই এই ক্ষেত্রে ব্যবহারকারী_ক্যানসেল ত্রুটিটি ফিরিয়ে দিতে হবে।
- মালিকানা স্থানান্তর:
- ডিভাইসটি ক্লাউড পরিষেবা থেকে স্পষ্টভাবে মুছে ফেলা হতে পারে।
- যদি ডিভাইসটি সাফল্য পায় তবে /ক্লাউডপ্রিন্ট /প্রিন্টার (জিসিপির জন্য) কলের ফলস্বরূপ কোনও ডিভাইসের বিবরণ নেই, তবে এটি অবশ্যই ডিফল্ট (বক্সের বাইরে) মোডে ফিরে যেতে হবে।
- যদি ডিভাইসের শংসাপত্রগুলি আর কাজ করে না (স্পষ্টভাবে সার্ভার থেকে "অবৈধ শংসাপত্রগুলি" প্রতিক্রিয়ার কারণে), এটি অবশ্যই ডিফল্ট (বক্সের বাইরে) মোডে ফিরে যেতে হবে।
- স্থানীয় কারখানার রিসেট অবশ্যই ডিভাইসের শংসাপত্রগুলি সাফ করতে হবে এবং এটি ডিফল্ট অবস্থায় সেট করতে হবে।
- Ption চ্ছিক: ডিভাইসটি শংসাপত্রগুলি সাফ করার জন্য একটি মেনু আইটেম সরবরাহ করতে পারে এবং এটি ডিফল্ট মোডে রাখতে পারে।
- এক্সএমপিপি বিজ্ঞপ্তিগুলিকে সমর্থনকারী ডিভাইসগুলি অবশ্যই সার্ভারটি পিং করার ক্ষমতা অন্তর্ভুক্ত করতে হবে। পিং টাইমআউটটি অবশ্যই "লোকাল_সেটেটিং" এর মাধ্যমে সার্ভার থেকে নিয়ন্ত্রণযোগ্য হতে হবে।
- ডিভাইসটি সুস্পষ্টভাবে সার্ভার (/ক্লাউডপ্রিন্ট/প্রিন্টার এপিআই জিসিপির জন্য, এক্সএমপিপি পিংস ছাড়াও) পিং করতে পারে যে তারা সিঙ্কে রয়েছে তা নিশ্চিত করার জন্য দিনে একবারে (24 ঘন্টা) প্রায়শই বেশি কিছু হয় না। 24-32 ঘন্টা উইন্ডোর মধ্যে চেক উইন্ডোটি এলোমেলো করার পরামর্শ দেওয়া হয়।
- Ption চ্ছিক: ক্লাউড প্রিন্ট ডিভাইসগুলির জন্য, এটি সুপারিশ করা হয় তবে ব্যবহারকারীকে ডিভাইস থেকে নতুন মুদ্রণ কাজের জন্য একটি চেক শুরু করার অনুমতি দেওয়ার জন্য ম্যানুয়াল উপায় (বোতাম) থাকার প্রয়োজন নেই। কিছু মুদ্রক ইতিমধ্যে এটি আছে।
- ঐচ্ছিক। এন্টারপ্রাইজ প্রিন্টারে স্থানীয় আবিষ্কার সম্পূর্ণরূপে অক্ষম করার বিকল্প থাকতে পারে। এই ক্ষেত্রে, ডিভাইসটি অবশ্যই সার্ভারে এই স্থানীয় সেটিংস আপডেট করতে হবে। নতুন স্থানীয় সেটিংস অবশ্যই খালি থাকতে হবে ("স্থানীয়_ডিস্কোভারি" সেট করা "মিথ্যা", এর অর্থ এটি জিসিপি পরিষেবা থেকে পুনরায় সক্ষম করা যেতে পারে)।
6.1.2 ডিফল্ট নিবন্ধকরণ ডায়াগ্রাম

6.2। এক্সএসএসআই এবং এক্সএসআরএফ আক্রমণ এবং প্রতিরোধ
এই বিভাগটি ডিভাইসে এক্সএসএসআই এবং এক্সএসআরএফ আক্রমণগুলির সম্ভাবনা এবং কীভাবে সেগুলি থেকে রক্ষা করবেন (টোকেন প্রজন্মের কৌশলগুলি সহ) এর সম্ভাবনা ব্যাখ্যা করবে।আরও বিশদ এখানে রয়েছে: http://googleonlinesecurity.blogspot.com/2011/05/website-security-for-webmasters.html
সাধারণত, যখন কোনও সাইট কুকি প্রমাণীকরণ প্রক্রিয়া ব্যবহার করে তখন এক্সএসএসআই এবং এক্সএসআরএফ আক্রমণগুলি সম্ভব। যদিও গুগল তাদের ক্লাউড প্রিন্ট পরিষেবা সহ কুকি ব্যবহার করে না, এই জাতীয় আক্রমণগুলি এখনও সম্ভব। স্থানীয় নেটওয়ার্ক অ্যাক্সেস, ডিজাইন অনুসারে, স্পষ্টভাবে অনুরোধগুলি বিশ্বাস করে।
6.2.1। Xssi
কোনও দূষিত ওয়েবসাইটের পক্ষে আইপি ঠিকানা এবং একটি প্রাইভেট-সামঞ্জস্যপূর্ণ ডিভাইসের পোর্ট নম্বর অনুমান করা এবং একটি <স্ক্রিপ্ট> ট্যাগের অভ্যন্তরে "এসআরসি = <এপিআই নাম>" ব্যবহার করে প্রাইভেট এপিআই কল করার চেষ্টা করা সম্ভব:<script type="text/javascript" src="http://192.168.1.42:8080/privet/info"></script>
এই ধরণের আক্রমণ প্রতিরোধ করতে, সমস্ত প্রাইভেট এপিআই কলগুলির অবশ্যই অনুরোধে "এক্স-প্রাইভেট-টোকেন" শিরোনাম প্রয়োজন। "এসআরসি = <এপিআই>" স্ক্রিপ্ট ট্যাগগুলি শিরোনাম যুক্ত করতে সক্ষম হয় না, কার্যকরভাবে এই ধরণের আক্রমণ থেকে রক্ষা করে।
6.2.2। এক্সএসআরএফ
http://en.wikedia.org/wiki/cross-site_request_forgeryকোনও দূষিত ওয়েবসাইটের পক্ষে আইপি ঠিকানা এবং একটি প্রাইভেট-সামঞ্জস্যপূর্ণ ডিভাইসের পোর্ট নম্বর অনুমান করা সম্ভব এবং একটি <আইফ্রেম>, ফর্মগুলি বা অন্য কোনও ক্রস-ওয়েবসাইট লোডিং প্রক্রিয়া ব্যবহার করে প্রাইভেট এপিআইকে কল করার চেষ্টা করা সম্ভব। আক্রমণকারীরা অনুরোধের ফলাফলগুলি অ্যাক্সেস করতে সক্ষম হবে না, তবে অনুরোধটি যদি কোনও ক্রিয়া (যেমন মুদ্রণ) সম্পাদন করে তবে তারা এটি ট্রিগার করতে পারে।
এই আক্রমণ প্রতিরোধ করতে, আমাদের নিম্নলিখিত সুরক্ষা প্রয়োজন:
- ছেড়ে /প্রাইভেট /তথ্য এপিআই এক্সএসআরএফের জন্য উন্মুক্ত
- /প্রাইভেট/তথ্য এপিআই অবশ্যই ডিভাইসে কোনও ক্রিয়া সম্পাদন করবেন না
- এক্স-প্রাইভেট-টোকেন পেতে /প্রাইভেট /তথ্য এপিআই ব্যবহার করুন
- অন্যান্য সমস্ত এপিআইকে অবশ্যই "এক্স-প্রাইভেট-টোকেন" শিরোনামে একটি বৈধ এক্স-প্রাইভেট-টোকেন পরীক্ষা করতে হবে।
- এক্স-প্রাইভেট-টোকেনটি কেবল 24 ঘন্টা বৈধ হওয়া উচিত।
এমনকি যদি কোনও আক্রমণকারী /প্রাইভেট /তথ্য এপিআই কার্যকর করতে সক্ষম হয় তবে তারা প্রতিক্রিয়া থেকে এক্স-প্রাইভেট-টোকেন পড়তে সক্ষম হবে না এবং তাই অন্য কোনও এপিআই কল করতে সক্ষম হবে না।
নিম্নলিখিত অ্যালগরিদম ব্যবহার করে এক্সএসআরএফ টোকেন তৈরি করার জন্য দৃ strongly ়ভাবে সুপারিশ করা হয়:
XSRF_token = base64( SHA1(device_secret + DELIMITER + issue_timecounter) + DELIMITER + issue_timecounter )
এক্সএসআরএফ টোকেন প্রজন্মের উপাদানগুলি:
- ডিলিমিটার একটি বিশেষ চরিত্র, সাধারণত ':'
- কিছু ইভেন্ট (টাইমস্ট্যাম্পের জন্য যুগ) বা ডিভাইস বুট সময় (সিপিইউ কাউন্টারগুলির জন্য) থেকে ইস্যু_টাইমকউন্টার বেশ কয়েকটি সেকেন্ড। ডিভাইসটি আপ এবং চলমান থাকাকালীন ইস্যু_টাইমকউন্টার ক্রমাগত বাড়ছে (নীচে টোকেন যাচাইকরণ দেখুন)।
- SHA1 - SHA1 অ্যালগরিদম ব্যবহার করে হ্যাশ ফাংশন
- বেস 64 - বেস 64 এনকোডিং
- ডিভাইস_সেক্রেট - ডিভাইসের জন্য নির্দিষ্ট গোপন। ডিভাইস সিক্রেট অবশ্যই প্রতিটি পুনঃসূচনা আপডেট করতে হবে।
ডিভাইস গোপন তৈরি করার প্রস্তাবিত উপায়:
- প্রতিটি পুনঃসূচনাটিতে একটি নতুন ইউইড তৈরি করুন
- প্রতিটি পুনঃসূচনাটিতে একটি 64 বিট এলোমেলো নম্বর উত্পন্ন করুন
এটি জারি করা সমস্ত এক্সএসআরএফ টোকেন সংরক্ষণ করার জন্য ডিভাইসটির প্রয়োজন নেই। যখন ডিভাইসটির বৈধতার জন্য একটি এক্সএসআরএফ টোকেন যাচাই করার প্রয়োজন হয়, তখন এটি টোকেনটি 64-ডিকোড করা উচিত। দ্বিতীয়ার্ধ (ক্লিয়ারটেক্সট) থেকে ইস্যু_টাইমকউন্টারটি পান এবং ডিভাইস_সেক্রেট + ডিলিমিটার + ইস্যু_টাইমকউন্টার এর Sha1 হ্যাশ উত্পাদন করার চেষ্টা করুন যেখানে ইস্যু_টাইমকউন্টার টোকেন থেকে রয়েছে। যদি সদ্য উত্পাদিত SHA1 টোকেনের সাথে একটির সাথে মেলে তবে ডিভাইসটি অবশ্যই অবশ্যই পরীক্ষা করতে হবে যে ইস্যু_টাইমকউন্টার বর্তমান সময়ের কাউন্টারের (24 ঘন্টা) বৈধতার সময়ের মধ্যে রয়েছে কিনা। এটি করার জন্য, ডিভাইসটি বর্তমান সময়ের কাউন্টার (উদাহরণস্বরূপ সিপিইউ কাউন্টার) নেয় এবং এটি থেকে ইস্যু_টাইমকউন্টারকে বিয়োগ করে। টোকেন ইস্যু হওয়ার পরে ফলাফলটি অবশ্যই সেকেন্ডের সংখ্যা হতে হবে।
গুরুত্বপূর্ণ: এটি এক্সএসআরএফ সুরক্ষা বাস্তবায়নের প্রস্তাবিত উপায়। প্রাইভেট স্পেসিফিকেশনের ক্লায়েন্টরা এক্সএসআরএফ টোকেন বোঝার চেষ্টা করবে না, পরিবর্তে তারা একটি ব্ল্যাকবক্স হিসাবে চিকিত্সা করবে। চিত্র 6.2.3 এক্স-প্রাইভেট-টোকেন এবং একটি সাধারণ অনুরোধের যাচাইকরণ বাস্তবায়নের একটি প্রস্তাবিত উপায় চিত্রিত করে।
6.2.3 এক্স-প্রাইভেট টোকেন জেনারেশন এবং যাচাইকরণ ক্রম ডায়াগ্রাম

6.3। ওয়ার্কফ্লো ডায়াগ্রাম
এই বিভাগটি বিভিন্ন ক্ষেত্রে একটি কর্মপ্রবাহ চিত্রিত করবে।6.3.1। বক্স ওয়ার্কফ্লো থেকে প্রিন্টার

6.3.2। নিবন্ধিত প্রিন্টার স্টার্টআপ

6.3.3 এক্সএমপিপি বিজ্ঞপ্তিগুলি ওয়ার্কফ্লো হ্যান্ডলিং

6.3.4। প্রিন্টার সেটিংস ওয়ার্কফ্লো পরীক্ষা করুন
