| --- a/src/srvc_place.c 2013-10-02 13:49:18.048588870 -0500 |
| +++ b/src/srvc_place.c 2013-10-02 13:50:18.027648225 -0500 |
| @@ -39,6 +39,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, /* ? */ |
| @@ -165,6 +175,7 @@ |
| guint16 login_type; |
| guint32 unknown_a; |
| guint32 unknown_b; |
| + char *extraname; |
| }; |
| |
| |
| @@ -189,6 +200,7 @@ |
| mwIdBlock_clear(&p->idb); |
| g_free(p->login_id); |
| g_free(p->name); |
| + g_free(p->extraname); |
| g_free(p); |
| } |
| |
| @@ -394,6 +406,9 @@ |
| 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) |
| @@ -519,8 +534,18 @@ |
| |
| 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); |
| @@ -545,6 +570,10 @@ |
| guint32_get(b, &m->unknown_a); |
| guint32_get(b, &m->unknown_b); |
| |
| + if(newMsgFormat) { |
| + mwString_get(b, &m->extraname); |
| + } |
| + |
| PUT_MEMBER(place, m); |
| } |
| |