اتصالی را پیکربندی کنید که واقعاً جریان XMPP را حمل می‌کند. تنظیم پروکسی روی یک URLConnection نامرتبط، اتصال TCP اسمک را به سرویس پیام‌رسانی هدایت نمی‌کند.

اسمک 4.4 کارخانه‌های ProxyInfo را برای HTTP، SOCKS4 و SOCKS5 فراهم می‌کند. شیء حاصل را به سازنده اتصال XMPP متصل کنید:

import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.proxy.ProxyInfo;
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;

ProxyInfo proxy = ProxyInfo.forSocks5Proxy(
    "proxy.example.net", 1080, proxyUser, proxyPassword
);

XMPPTCPConnectionConfiguration config =
    XMPPTCPConnectionConfiguration.builder()
        .setXmppDomain("chat.example.net")
        .setHost("xmpp-node.example.net")
        .setPort(5222)
        .setProxyInfo(proxy)
        .setSecurityMode(
            ConnectionConfiguration.SecurityMode.required
        )
        .build();

این یک قطعه پیکربندی برای یک راه‌اندازی موجود اسمک 4.4 است. برنامه دربرگیرنده استثناهای بررسی‌شده سازنده را مدیریت می‌کند و اعتبارنامه‌های پروکسی را تأمین می‌کند. میزبان و درگاه صریح بیانگر نقطه پایانی واقعی TCP سرویس XMPP هستند.

سه نام با نقش‌های متفاوت وجود دارد:

  • proxy.example.net واسطه‌ای است که اتصال اولیه را دریافت می‌کند.
  • xmpp-node.example.net نقطه پایانی سروری است که از پروکسی خواسته می‌شود به آن برسد.
  • chat.example.net دامنه سرویس XMPP است، مانند دامنه پس از @ در JID یک حساب.

یک سرویس می‌تواند برای دو مورد آخر از نام یکسانی استفاده کند، اما نام میزبان پروکسی جای هیچ‌یک از آن دو را نمی‌گیرد. هویت موردنظر سرویس XMPP را در اتصال و اعتبارسنجی TLS آن حفظ کنید.

برای پروکسی HTTP از ProxyInfo.forHttpProxy با درگاه پروکسی و اعتبارنامه مناسب استفاده کنید. این مسیر به پروکسی نیاز دارد که بتواند اتصال XMPP را تونل کند و درگاه مقصد آن را مجاز بداند. پروکسی‌ای که مرور وب HTTPS را انجام می‌دهد به‌طور خودکار اتصال‌های TCP به سرویس XMPP روی 5222 را مجاز نمی‌کند.

حالت امنیتی الزامی در قطعه، TLS را شرط اتصال XMPP می‌کند. این حالت احراز هویت پروکسی انجام نمی‌دهد و اعتبارنامه‌های پروکسی به حساب XMPP وارد نمی‌شوند. پس از برقراری مسیر و نشست امن، حساب XMPP را از طریق جریان احراز هویت معمول اسمک پیکربندی کنید.

نمونه‌ها را در نسل API خودشان نگه دارید. نمونه‌های قدیمی ConnectionConfiguration مبتنی بر سازنده همان مفهوم مسیریابی را بیان می‌کنند، اما سازنده اسمک 4.4 رابطی است که اینجا استفاده می‌شود. نیازی به بازتولید نام میزبان‌های یک ارائه‌دهنده پیام‌رسانی منسوخ برای اعمال آن مفهوم بر یک سرویس XMPP کنونی نیست.

مقالات مرتبط