์ด ์ค๋ ๋๋ฅผ https://github.com/TokTok/c-toxcore/issues/428#issuecomment -285424242 ์ฌ๊ธฐ์์ ๊ณ์ํ๋ฉด ์๋ ๋ฌธ์ ์ ์คํธ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
ํ์ธ. ๋์ ์ ์.
์์๋ค์ํผ(์๋ง๋) ํ ํผ์ด๊ฐ ๋ค๋ฅธ ํผ์ด์๊ฒ ๋ณด๋ด๋(๋๋ ๋ค๋ฅธ ํผ์ด๋ก๋ถํฐ ๋ฐ๋) ์ฒซ ๋ฒ์งธ ํจํท์ 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์ ์ฐ๊ฒฐํ๊ณ ํด๋ผ์ด์ธํธ์ ์์ ํ ๊ธฐ๋ฅ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ฅ์ :
๋จ์ :
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋์ ์๊ฐ. ๋ด๊ฐ ์๋ก์ด ๊ณ ์ ๊ธฐ๋ฅ์ ์๊ฐํด ๋ธ๋ค๋ฉด? ์ด ๊ตฌ์กฐ๋ฅผ ํ์ฅํ๋ ค๋ฉด ๋จผ์ ์ฝ์ด์ PR์ ํด์ผ ํฉ๋๊น? ์๋์! ์ ์ฐจ์ ์ผ๋ก ํ์คํ๋ ๋ฌธ์์ด ์งํฉ๋ง. ๊ทธ๋ ์ง ์์ผ๋ฉด ์๋ํ์ง ์์ต๋๋ค.