Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Factory:zSystems
meanwhile
meanwhile-fix-groupchat.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File meanwhile-fix-groupchat.patch of Package meanwhile
--- a/src/srvc_place.c +++ b/src/srvc_place.c @@ -37,6 +37,16 @@ #define PROTOCOL_TYPE 0x00 #define PROTOCOL_VER 0x05 +/* + As of Sametime ~v8.5, there's a slightly different group chat invite message. + This identifies the earliest server version using the new format. Currently, + it's set for 8.5.1. If other people are having issues, we'll need to decrease + this to their version. +*/ +#define NEW_FORMAT_SERVER_VER_MAJOR 0x001e +#define NEW_FORMAT_SERVER_VER_MINOR 0x213f + +#define GUINT(val) (GPOINTER_TO_UINT((val))) enum incoming_msg { msg_in_JOIN_RESPONSE = 0x0000, /* ? */ @@ -163,6 +173,7 @@ struct place_member { guint16 login_type; guint32 unknown_a; guint32 unknown_b; + char *extraname; }; @@ -187,6 +198,7 @@ static void member_free(struct place_member *p) { mwIdBlock_clear(&p->idb); g_free(p->login_id); g_free(p->name); + g_free(p->extraname); g_free(p); } @@ -392,6 +404,9 @@ static int recv_SECTION_PEER_JOIN(struct mwPlace *place, guint16_get(b, &pm->login_type); guint32_get(b, &pm->unknown_a); guint32_get(b, &pm->unknown_b); + /* TODO: Since the Notes upgrade, an extra name string is sent to + recv_SECTION_LIST(). It might be sent here, but since we're only + parsing one user, it probably doesn't matter here. */ PUT_MEMBER(place, pm); if(srvc->handler && srvc->handler->peerJoined) @@ -517,8 +532,18 @@ static int recv_SECTION_PEER(struct mwPlace *place, static int recv_SECTION_LIST(struct mwPlace *place, struct mwGetBuffer *b) { - int ret = 0; + int ret = 0, major, minor; guint32 sec, count; + struct mwSession *session; + gboolean newMsgFormat; + + /* Check the server version to see if the message uses the new format */ + session = mwService_getSession(MW_SERVICE(place->service)); + major = GUINT(mwSession_getProperty(session, mwSession_SERVER_VER_MAJOR)); + minor = GUINT(mwSession_getProperty(session, mwSession_SERVER_VER_MINOR)); + newMsgFormat = (major == NEW_FORMAT_SERVER_VER_MAJOR + && minor >= NEW_FORMAT_SERVER_VER_MINOR) + || major > NEW_FORMAT_SERVER_VER_MAJOR; mwGetBuffer_advance(b, 4); guint32_get(b, &sec); @@ -543,6 +568,10 @@ static int recv_SECTION_LIST(struct mwPlace *place, guint32_get(b, &m->unknown_a); guint32_get(b, &m->unknown_b); + if(newMsgFormat) { + mwString_get(b, &m->extraname); + } + PUT_MEMBER(place, m); }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor