C-toxcore: ํด๋ผ์ด์–ธํŠธ ๊ธฐ๋Šฅ ํŒจํ‚ท ๊ตฌํ˜„

์— ๋งŒ๋“  2017๋…„ 03์›” 13์ผ  ยท  8์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: TokTok/c-toxcore

์ด ์Šค๋ ˆ๋“œ๋ฅผ https://github.com/TokTok/c-toxcore/issues/428#issuecomment -285424242 ์—ฌ๊ธฐ์—์„œ ๊ณ„์†ํ•˜๋ฉด ์›๋ž˜ ๋ฌธ์ œ์˜ ์ŠคํŒธ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

P1 messenger proposal

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

client_capabilities๋Š” ๊ตฌ์กฐ์ฒด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜์œ ์ƒ๊ฐ. ๋‚ด๊ฐ€ ์ƒˆ๋กœ์šด ๊ณ ์œ  ๊ธฐ๋Šฅ์„ ์ƒ๊ฐํ•ด ๋‚ธ๋‹ค๋ฉด? ์ด ๊ตฌ์กฐ๋ฅผ ํ™•์žฅํ•˜๋ ค๋ฉด ๋จผ์ € ์ฝ”์–ด์— PR์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ์š”! ์ ์ฐจ์ ์œผ๋กœ ํ‘œ์ค€ํ™”๋œ ๋ฌธ์ž์—ด ์ง‘ํ•ฉ๋งŒ. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  8 ๋Œ“๊ธ€

ํ™•์ธ. ๋‚˜์˜ ์ œ์•ˆ.

์•„์‹œ๋‹ค์‹œํ”ผ(์•„๋งˆ๋„) ํ•œ ํ”ผ์–ด๊ฐ€ ๋‹ค๋ฅธ ํ”ผ์–ด์—๊ฒŒ ๋ณด๋‚ด๋Š”(๋˜๋Š” ๋‹ค๋ฅธ ํ”ผ์–ด๋กœ๋ถ€ํ„ฐ ๋ฐ›๋Š”) ์ฒซ ๋ฒˆ์งธ ํŒจํ‚ท์€ PACKET_ID_ONLINE์ž…๋‹ˆ๋‹ค. ์ด ํŒจํ‚ท์€ 1๋ฐ”์ดํŠธ ๊ธธ์ด(ํŒจํ‚ท ID ํฌํ•จ)์ž…๋‹ˆ๋‹ค. ๋‚ด ์ œ์•ˆ์€ ์ด ํŒจํ‚ท์—์„œ ํด๋ผ์ด์–ธํŠธ์˜ ๊ธฐ๋Šฅ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€, Isotoxin์€ ์ด๋ฏธ ์ด๊ฒƒ์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ํ˜„์žฌ ์ฝ”์–ด๋Š” ํฌ๊ธฐ๊ฐ€ 1๋ฐ”์ดํŠธ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ์ด ํŒจํ‚ค์ง€๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Isotoxin์€ ์ด ํŒจํ‚ท์„ ๋‘ ๋ฒˆ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ฆ‰, ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•œ 1๋ฐ”์ดํŠธ ๊ธธ์ด์™€ ๊ธฐ๋Šฅ ์ •๋ณด๊ฐ€ ์žˆ๋Š” ์ „์ฒด ๊ธธ์ด์ž…๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ํ˜•์‹์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? key:valuen ํ˜•์‹์˜ ๋‹จ์ˆœํ•œ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค

ํ˜„์žฌ Isotoxin์˜ ๊ธฐ๋Šฅ ๋ฌธ์ž์—ด:
options.client_capabilities = "client:isotoxin/" SS(PLUGINVER) "\n"
"support_bbtags:b,s,u,i\n"
"support_viewsize:1\n"
"support_msg_chain:1\n"
"support_msg_cr_time:1\n"
"support_video_ex:1\n"
"support_folder_share:1\n";

๊ทธ๋Ÿฐ ๋ฐฉ์‹์ด ๋งˆ์Œ์— ๋“ค์ง€ ์•Š๋Š”๋‹ค๋ฉด PR์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋˜๋Š” ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฌ๋‚˜ ํด๋ผ์ด์–ธํŠธ๋Š” ์ฒซ ๋ฒˆ์งธ ํŒจํ‚ท์—์„œ ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ์˜ ๊ธฐ๋Šฅ์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ธฐ๋Šฅ ํŒจํ‚ท์„ ์ง€์›ํ•˜๋Š”์ง€ ๋˜๋Š” ์ด ํŒจํ‚ท์ด ์•„์ง ์ˆ˜์‹ ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ข‹์€ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ๋•Œ๋งŒ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํŒจํ‚ท ํฌ๊ธฐ๊ฐ€ ์ œํ•œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์•„๋งˆ๋„ ๋” ๋งŽ์€ ํŒจํ‚ท์„ ๋ณด๋‚ด์–ด ์šฐํšŒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์•ฝ๊ฐ„์˜ ์ƒ๊ฐ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

client_capabilities ๋Š” ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด ์˜ต์…˜ 1๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ์ฒด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

/**
 * We assume every bool to be false if not specified.
 **/
struct Tox_Client_Capabilities {
  /**
   * The client name, lower case alphanumeric, no spaces. Dash allowed.
   */
  const char *client_name;

  /**
   * The client version, using Semantic Versioning. ie. `0.1.7`, `3.8.0-beta`, etc.
   */
  const char *client_version;

  /**
   * True if the client supports ToxMe/ToxDNS/QNL lookups.
   */
  bool supports_lookup;

  /**
   * True if the client supports ToxID sharing.
   * <strong i="7">@see</strong> Antox and Toxygen
   */
  bool supports_id_sharing;

  /**
   * True if the client supports ToxIdenticons.
   * <strong i="8">@see</strong> Ricin
   */
  bool supports_tox_identicons;

  /**
   * True if the client supports BBCode rendering.
   */
  bool supports_bbcode;

  /**
   * True if the client supports Markdown rendering.
   */
  bool supports_markdown;

  /**
   * True if the client supports audio calls.
   */
  bool supports_audio;

  /**
   * True if the client supports video calls.
   */
  bool supports_video;

  /**
   * True if the client supports file transfers.
   */
  bool supports_files;

  /**
   * True if the client supports inline images transfers.
   */
  bool supports_inline_images;

  /**
   * True if the client supports avatars.
   */
  bool supports_avatars;

  /**
   * True if the client supports message splitting.
   */
  bool supports_messages_split;

  /**
   * True if the client supports whateveryouwantoaddtothatlist.
   */
  bool supports_whatever;
}

client_capabilities๋Š” ๊ตฌ์กฐ์ฒด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜์œ ์ƒ๊ฐ. ๋‚ด๊ฐ€ ์ƒˆ๋กœ์šด ๊ณ ์œ  ๊ธฐ๋Šฅ์„ ์ƒ๊ฐํ•ด ๋‚ธ๋‹ค๋ฉด? ์ด ๊ตฌ์กฐ๋ฅผ ํ™•์žฅํ•˜๋ ค๋ฉด ๋จผ์ € ์ฝ”์–ด์— PR์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ์š”! ์ ์ฐจ์ ์œผ๋กœ ํ‘œ์ค€ํ™”๋œ ๋ฌธ์ž์—ด ์ง‘ํ•ฉ๋งŒ. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ํ‘œ์ค€ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. JSON, Yaml, TOML, ์›ํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์ด์ง€๋งŒ ํ‘œ์ค€์ž…๋‹ˆ๋‹ค. :)

๋‚˜๋Š” ํ˜•์‹์ด ๊ตฌํ˜„ ์„ธ๋ถ€ ์‚ฌํ•ญ์ธ ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. toxcore๊ฐ€ ์ด๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ณ  ํ‚ค/๊ฐ’๊ณผ ์œ ์‚ฌํ•œ API(์˜ˆ: all_capability_keys , value_for_key )๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@dvor toxcore๊ฐ€ ํ‚ค์™€ ๊ฐ’์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์•ผ ํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž์‹ ์˜ ๊ฒƒ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ํŒจํ‚ท์— ๋Œ€ํ•œ ๋‚˜์˜ ์ œ์•ˆ:

[Fixed length binary Header] ... for client capability messages longer than one packet
key=value\n
...

ํ—ค๋”๋Š” ์„ธ๊ทธ๋จผํŠธ ์ˆ˜๋ฅผ uint16์œผ๋กœ, ์„ธ๊ทธ๋จผํŠธ ๋ฒˆํ˜ธ๋ฅผ uint16์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

ํ‚ค์— ํ—ˆ์šฉ๋˜๋Š” ๋ฌธ์ž๋Š” [a-zA-Z0-9_] ์ž…๋‹ˆ๋‹ค. ๊ฐ’์— ํ—ˆ์šฉ๋˜๋Š” ๋ฌธ์ž๋Š” \n ๋ฐ = ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฌธ์ž์ž…๋‹ˆ๋‹ค. ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋Š” base64๋กœ ์ธ์ฝ”๋”ฉ๋ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ฝ”์–ด๋Š” 1๋ฐ”์ดํŠธ ๊ธธ์ด์˜ PACKET_ID_ONLINE๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋‚ด ์ œ์•ˆ์€ ์ด ์‚ฌ์‹ค์„ ๊ธฐ๋Šฅ ์‹œํ€€์Šค์˜ ๋์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด์ „ ์ฝ”์–ด๋Š” 1๋ฐ”์ดํŠธ PACKET_ID_ONLINE์„ ๋ณด๋‚ด๊ณ  ์ƒˆ ์ฝ”์–ด๋Š” ์ด๋ฅผ ์‹œํ€€์Šค์˜ ๋์œผ๋กœ ํ•ด์„ํ•˜๋ฏ€๋กœ ๊ธฐ๋Šฅ ์ •๋ณด๊ฐ€ ์ˆ˜์‹ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ƒˆ ์ฝ”์–ด๋Š” ๋งˆ์ง€๋ง‰ 1๋ฐ”์ดํŠธ ๊ธธ์ด์˜ PACKET_ID_ONLINE ๊ธฐ๋Šฅ์ด ์žˆ๋Š” PACKET_ID_ONLINE ์ˆ˜๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ด์ „ ์ฝ”์–ด๋Š” 1๋ฐ”์ดํŠธ PACKET_ID_ONLINE๋งŒ ํ—ˆ์šฉํ•˜๋ฉฐ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์ฝ”์–ด๋Š” ๋ชจ๋“  >1๋ฐ”์ดํŠธ PACKET_ID_ONLINE์„ ์—ฐ๊ฒฐํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์— ์™„์ „ํ•œ ๊ธฐ๋Šฅ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์žฅ์ :

  • ์ด์ „ ์ฝ”์–ด์™€ ์ƒˆ ์ฝ”์–ด ๊ฐ„์˜ ์™„๋ฒฝํ•œ ํ˜ธํ™˜์„ฑ
  • ํด๋ผ์ด์–ธํŠธ๋Š” tox_callback_friend_connection_status์—์„œ ๊ธฐ๋Šฅ ์ •๋ณด์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Isotoxin์€ ์ด๋ฏธ ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(์—ฐ๊ฒฐ ์ œ์™ธ).

๋‹จ์ :

  • ?
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰