Document protocol API

This commit is contained in:
Jaidyn Ann 2021-06-07 11:45:30 -05:00
parent 503c196d4f
commit 26e99477fc
4 changed files with 87 additions and 37 deletions

View File

@ -51,7 +51,7 @@ AccountManager::SetNickname(BString nick)
// Create message // Create message
BMessage* msg = new BMessage(IM_MESSAGE); BMessage* msg = new BMessage(IM_MESSAGE);
msg->AddInt32("im_what", IM_SET_OWN_NICKNAME); msg->AddInt32("im_what", IM_SET_OWN_NICKNAME);
msg->AddString("nick", nick); msg->AddString("user_name", nick);
// Send message // Send message
TheApp* theApp = reinterpret_cast<TheApp*>(be_app); TheApp* theApp = reinterpret_cast<TheApp*>(be_app);

View File

@ -32,12 +32,15 @@ enum im_what_code {
IM_GET_CONTACT_LIST = 1, IM_GET_CONTACT_LIST = 1,
//! Server-side contact list received //! Server-side contact list received
// Requires: Stringlist "user_id"
IM_CONTACT_LIST = 2, IM_CONTACT_LIST = 2,
//! Contact(s) was added to the server-side list //! Contact(s) was added to the server-side list
// Requires: String "user_id"
IM_CONTACT_LIST_ADD_CONTACT = 3, IM_CONTACT_LIST_ADD_CONTACT = 3,
//! Contact(s) removed from the server-side list //! Contact(s) removed from the server-side list
// Requires: String "user_id"
IM_CONTACT_LIST_REMOVED_CONTACT = 4, IM_CONTACT_LIST_REMOVED_CONTACT = 4,
@ -45,32 +48,33 @@ enum im_what_code {
* Messages related to text chat. * Messages related to text chat.
*/ */
//! Send a chat message //! Send a chat message to the protocol
// Requires: String "user_id", String "body"
IM_SEND_MESSAGE = 20, IM_SEND_MESSAGE = 20,
//! Chat message has been sent //! Chat message has been sent
// Requires: String "chat_id", String "user_id", String "body"
// Accepts: String "subject"
IM_MESSAGE_SENT = 21, IM_MESSAGE_SENT = 21,
//! Chat message received //! Chat message received
// Requires: String "chat_id", String "user_id", String "body"
// Accepts: String "subject"
IM_MESSAGE_RECEIVED = 22, IM_MESSAGE_RECEIVED = 22,
//! Contact started typing //! Logs received
IM_CONTACT_STARTED_TYPING = 23, // Requires: String "chat_id", String "user_id", String "body"
// Accepts: String "subject"
//! Contact stopped typing IM_LOGS_RECEIVED = 23,
IM_CONTACT_STOPPED_TYPING = 24,
//! Contact gone
IM_CONTACT_GONE = 25,
//! User started typing //! User started typing
IM_USER_STARTED_TYPING = 26, // Requires: String "chat_id", String "user_id"
IM_USER_STARTED_TYPING = 24,
//! User stopped typing //! User stopped typing
IM_USER_STOPPED_TYPING = 27, // Requires: String "chat_id", String "user_id"
IM_USER_STOPPED_TYPING = 25,
//! Logs received
IM_LOGS_RECEIVED = 28,
/* /*
@ -89,21 +93,27 @@ enum im_what_code {
*/ */
//! Received contact new status //! Received contact new status
// Requires: String "user_id", int32/CayaStatus "status"
IM_STATUS_SET = 60, IM_STATUS_SET = 60,
//! Contact's avatar icon was changed //! Contact's avatar icon was changed
// Requires: String "user_id", Ref "ref"
IM_AVATAR_SET = 61, IM_AVATAR_SET = 61,
//! Get contact information //! Get contact information
IM_GET_CONTACT_INFO = 62, IM_GET_CONTACT_INFO = 62,
//! Received contact information //! Received contact information
// Requires: String "user_id"
// Accepts: String "user_name", String "message", int32/CayaStatus "status"
IM_CONTACT_INFO = 63, IM_CONTACT_INFO = 63,
//! Get extended contact information //! Get extended contact information
IM_GET_EXTENDED_CONTACT_INFO = 64, IM_GET_EXTENDED_CONTACT_INFO = 64,
//! Received extended contact information //! Received extended contact information
// Requires: String "user_id"
// Accepts: String "user_name", String "full_name"
IM_EXTENDED_CONTACT_INFO = 65, IM_EXTENDED_CONTACT_INFO = 65,
@ -112,24 +122,29 @@ enum im_what_code {
*/ */
//! Change own nickname //! Change own nickname
// Requires: String "user_name"
IM_SET_OWN_NICKNAME = 80, IM_SET_OWN_NICKNAME = 80,
//! Own nickname was changed //! Own nickname was changed
IM_OWN_NICKNAME_SET = 81, IM_OWN_NICKNAME_SET = 81,
//! Change own status //! Change own status
// Requires: int32/CayaStatus "status"
IM_SET_OWN_STATUS = 82, IM_SET_OWN_STATUS = 82,
// Own status was chagned // Own status was chagned
// Requires: int32/CayaStatus "status"
IM_OWN_STATUS_SET = 83, IM_OWN_STATUS_SET = 83,
//! Get own contact information //! Get own contact information
// Requires: String "user_id"
IM_OWN_CONTACT_INFO = 84, IM_OWN_CONTACT_INFO = 84,
//! Change own avatar icon //! Change own avatar icon
IM_SET_OWN_AVATAR = 85, IM_SET_OWN_AVATAR = 85,
//! Own avatar icon was changed //! Own avatar icon was changed
// Requires: Ref "ref"
IM_OWN_AVATAR_SET = 86, IM_OWN_AVATAR_SET = 86,
@ -180,30 +195,42 @@ enum im_what_code {
*/ */
//! Create an individual chat //! Create an individual chat
// Requires: String "user_id"
IM_CREATE_CHAT = 150, IM_CREATE_CHAT = 150,
//! Chat has been created //! Chat has been created
// Requires: String "chat_id", String "user_id"
IM_CHAT_CREATED = 151, IM_CHAT_CREATED = 151,
//! Join a room //! Join a room
// Requires: String "chat_id"
IM_JOIN_ROOM = 152, IM_JOIN_ROOM = 152,
//! Confirm the room's been joined //! Confirm the room's been joined
// Requires: String "chat_id"
IM_ROOM_JOINED = 153, IM_ROOM_JOINED = 153,
//! User left the room //! User wants to leave the room
// Requires: String "chat_id"
IM_LEAVE_ROOM = 154, IM_LEAVE_ROOM = 154,
//! User left the room //! User left the room
// Requires: String "chat_id"
IM_ROOM_LEFT = 155, IM_ROOM_LEFT = 155,
//! Quietly add a user(s) to the chat //! Quietly add a user(s) to the chat
// Requires: String "chat_id", StringList "user_id"
// Accepts: StringList "user_name"
IM_ROOM_PARTICIPANTS = 156, IM_ROOM_PARTICIPANTS = 156,
//! User has newly and explicitly joined //! User has newly and explicitly joined
// Requires: String "chat_id", String "user_id"
// Accepts: String "body"
IM_ROOM_PARTICIPANT_JOINED = 157, IM_ROOM_PARTICIPANT_JOINED = 157,
//! A user left the room //! A user left the room
// Requires: String "chat_id", String "user_id"
// Accepts: String "user_name", String "body"
IM_ROOM_PARTICIPANT_LEFT = 158, IM_ROOM_PARTICIPANT_LEFT = 158,
@ -211,11 +238,21 @@ enum im_what_code {
* Room metadata * Room metadata
*/ */
//! Room name //! Set the room name
IM_ROOM_NAME = 160, // Requires: String "chat_id", String "chat_name"
IM_SET_ROOM_NAME = 160,
//! Room subject //! Room name
IM_ROOM_SUBJECT = 161, // Requires: String "chat_id", String "chat_name"
IM_ROOM_NAME_SET = 161,
//! Set the room subject
// Requires: String "chat_id", String "subject"
IM_SET_ROOM_SUBJECT = 162,
//! Room has been set
// Requires: String "chat_id", String "subject"
IM_ROOM_SUBJECT_SET = 163,
/* /*
@ -223,33 +260,44 @@ enum im_what_code {
*/ */
//! A user's role has been changed //! A user's role has been changed
IM_ROOM_ROLECHANGE = 170, // Requires: String "role_title", int32 "role_perms", int32 "role_priority"
IM_ROOM_ROLECHANGED = 170,
//! Kick user //! Kick user
// Requires: String "chat_id", String "user_id"
IM_ROOM_KICK_PARTICIPANT = 171, IM_ROOM_KICK_PARTICIPANT = 171,
//! A user was kicked //! A user was kicked
// Requires: String "chat_id", String "user_id"
// Accepts: String "user_name", String "body"
IM_ROOM_PARTICIPANT_KICKED = 172, IM_ROOM_PARTICIPANT_KICKED = 172,
//! Ban user //! Ban user
// Requires: String "chat_id", String "user_id"
IM_ROOM_BAN_PARTICIPANT = 173, IM_ROOM_BAN_PARTICIPANT = 173,
//! A user was banned //! A user was banned
// Requires: String "chat_id", String "user_id"
// Accepts: String "user_name", String "body"
IM_ROOM_PARTICIPANT_BANNED = 174, IM_ROOM_PARTICIPANT_BANNED = 174,
//! Unban user //! Unban user
IM_ROOM_UNBAN_PARTICIPANT = 175, IM_ROOM_UNBAN_PARTICIPANT = 175,
//! Mute user //! Mute user
// Requires: String "chat_id", String "user_id"
IM_ROOM_MUTE_PARTICIPANT = 176, IM_ROOM_MUTE_PARTICIPANT = 176,
//! Unmute user //! Unmute user
// Requires: String "chat_id", String "user_id"
IM_ROOM_UNMUTE_PARTICIPANT = 177, IM_ROOM_UNMUTE_PARTICIPANT = 177,
//! Deafen //! Deafen
// Requires: String "chat_id", String "user_id"
IM_ROOM_DEAFEN_PARTICIPANT = 178, IM_ROOM_DEAFEN_PARTICIPANT = 178,
//! Allow to read messages //! Allow to read messages
// Requires: String "chat_id", String "user_id"
IM_ROOM_UNDEAFEN_PARTICIPANT = 179, IM_ROOM_UNDEAFEN_PARTICIPANT = 179,

View File

@ -181,7 +181,7 @@ Server::ImMessage(BMessage* msg)
const char* name = NULL; const char* name = NULL;
if ((msg->FindString("name", &name) == B_OK) if ((msg->FindString("user_name", &name) == B_OK)
&& (strcmp(name, "") != 0)) && (strcmp(name, "") != 0))
contact->SetNotifyName(name); contact->SetNotifyName(name);
@ -201,9 +201,12 @@ Server::ImMessage(BMessage* msg)
const char* name = NULL; const char* name = NULL;
if ((msg->FindString("full name", &name) == B_OK) if ((msg->FindString("full_name", &name) == B_OK)
&& (strcmp(name, "") != 0)) && (strcmp(name, "") != 0))
contact->SetNotifyName(name); contact->SetNotifyName(name);
else if ((msg->FindString("user_name", &name) == B_OK)
&& (strcmp(name, "") != 0))
contact->SetNotifyName(name);
break; break;
} }
case IM_AVATAR_SET: case IM_AVATAR_SET:
@ -285,7 +288,7 @@ Server::ImMessage(BMessage* msg)
chat->ImMessage(msg); chat->ImMessage(msg);
break; break;
} }
case IM_ROOM_ROLECHANGE: case IM_ROOM_ROLECHANGED:
{ {
Conversation* chat = _EnsureConversation(msg); Conversation* chat = _EnsureConversation(msg);
BString user_id; BString user_id;
@ -298,7 +301,7 @@ Server::ImMessage(BMessage* msg)
chat->SetRole(user_id, role); chat->SetRole(user_id, role);
break; break;
} }
case IM_ROOM_NAME: case IM_ROOM_NAME_SET:
{ {
BString name; BString name;
Conversation* chat = _EnsureConversation(msg); Conversation* chat = _EnsureConversation(msg);
@ -308,7 +311,7 @@ Server::ImMessage(BMessage* msg)
chat->SetNotifyName(name.String()); chat->SetNotifyName(name.String());
break; break;
} }
case IM_ROOM_SUBJECT: case IM_ROOM_SUBJECT_SET:
{ {
BString subject; BString subject;
Conversation* chat = _EnsureConversation(msg); Conversation* chat = _EnsureConversation(msg);

View File

@ -720,7 +720,7 @@ JabberHandler::_RoleChangedMsg(BString chat_id, BString user_id,
gloox::MUCRoomRole role, gloox::MUCRoomAffiliation aff) gloox::MUCRoomRole role, gloox::MUCRoomAffiliation aff)
{ {
BMessage roleMsg(IM_MESSAGE); BMessage roleMsg(IM_MESSAGE);
roleMsg.AddInt32("im_what", IM_ROOM_ROLECHANGE); roleMsg.AddInt32("im_what", IM_ROOM_ROLECHANGED);
roleMsg.AddString("user_id", user_id); roleMsg.AddString("user_id", user_id);
roleMsg.AddString("chat_id", chat_id); roleMsg.AddString("chat_id", chat_id);
roleMsg.AddString("role_title", _RoleTitle(role, aff)); roleMsg.AddString("role_title", _RoleTitle(role, aff));
@ -1170,8 +1170,7 @@ JabberHandler::handleRoster(const gloox::Roster& roster)
BMessage infoMsg(IM_MESSAGE); BMessage infoMsg(IM_MESSAGE);
infoMsg.AddInt32("im_what", IM_CONTACT_INFO); infoMsg.AddInt32("im_what", IM_CONTACT_INFO);
infoMsg.AddString("user_id", jid); infoMsg.AddString("user_id", jid);
infoMsg.AddString("name", name); infoMsg.AddString("user_name", name);
infoMsg.AddInt32("subscription", subscription);
infoMsg.AddInt32("status", CAYA_OFFLINE); infoMsg.AddInt32("status", CAYA_OFFLINE);
// Groups // Groups
@ -1270,10 +1269,10 @@ printf("------ %d\n", state);
switch (state) { switch (state) {
case gloox::ChatStateComposing: case gloox::ChatStateComposing:
msg.AddInt32("im_what", IM_CONTACT_STARTED_TYPING); msg.AddInt32("im_what", IM_USER_STARTED_TYPING);
break; break;
case gloox::ChatStatePaused: case gloox::ChatStatePaused:
msg.AddInt32("im_what", IM_CONTACT_STOPPED_TYPING); msg.AddInt32("im_what", IM_USER_STOPPED_TYPING);
break; break;
case gloox::ChatStateGone: case gloox::ChatStateGone:
// TODO // TODO
@ -1395,7 +1394,7 @@ JabberHandler::handleMUCSubject(gloox::MUCRoom *room, const std::string &nick,
return; return;
BMessage msg(IM_MESSAGE); BMessage msg(IM_MESSAGE);
msg.AddInt32("im_what", IM_ROOM_SUBJECT); msg.AddInt32("im_what", IM_ROOM_SUBJECT_SET);
msg.AddString("subject", subject.c_str()); msg.AddString("subject", subject.c_str());
msg.AddString("chat_id", chat_id); msg.AddString("chat_id", chat_id);
if (user_id.IsEmpty() == false) if (user_id.IsEmpty() == false)
@ -1537,7 +1536,7 @@ JabberHandler::handleSelfPresence(const gloox::RosterItem& item, const std::stri
msg.AddInt32("im_what", IM_OWN_CONTACT_INFO); msg.AddInt32("im_what", IM_OWN_CONTACT_INFO);
msg.AddString("protocol", Signature()); msg.AddString("protocol", Signature());
msg.AddString("user_id", item.jidJID().full().c_str()); msg.AddString("user_id", item.jidJID().full().c_str());
msg.AddString("name", item.name().c_str()); msg.AddString("user_name", item.name().c_str());
msg.AddInt32("subscription", item.subscription()); msg.AddInt32("subscription", item.subscription());
msg.AddInt32("status", _GlooxStatusToCaya(type)); msg.AddInt32("status", _GlooxStatusToCaya(type));
msg.AddString("message", presenceMsg.c_str()); msg.AddString("message", presenceMsg.c_str());
@ -1607,13 +1606,13 @@ JabberHandler::handleVCard(const gloox::JID& jid, const gloox::VCard* card)
BMessage msg(IM_MESSAGE); BMessage msg(IM_MESSAGE);
msg.AddInt32("im_what", IM_EXTENDED_CONTACT_INFO); msg.AddInt32("im_what", IM_EXTENDED_CONTACT_INFO);
msg.AddString("user_id", jid.bare().c_str()); msg.AddString("user_id", jid.bare().c_str());
msg.AddString("nick", card->nickname().c_str()); msg.AddString("user_name", card->nickname().c_str());
msg.AddString("family name", name.family.c_str()); msg.AddString("family_name", name.family.c_str());
msg.AddString("given name", name.given.c_str()); msg.AddString("given_name", name.given.c_str());
msg.AddString("middle name", name.middle.c_str()); msg.AddString("middle_name", name.middle.c_str());
msg.AddString("prefix", name.prefix.c_str()); msg.AddString("prefix", name.prefix.c_str());
msg.AddString("suffix", name.suffix.c_str()); msg.AddString("suffix", name.suffix.c_str());
msg.AddString("full name", fullName.c_str()); msg.AddString("full_name", fullName.c_str());
_SendMessage(&msg); _SendMessage(&msg);
// Return if there's no avatar icon // Return if there's no avatar icon