summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSzymon Tokarz <wsx22@o2.pl>2014-11-11 01:04:07 +0000
committerSzymon Tokarz <wsx22@o2.pl>2014-11-11 01:04:07 +0000
commiteabafdf4b42139ff85a8c8212cd0a9d287171e73 (patch)
treeef952efd34dddb609a4590f79cdc5e481f647a8e
parentb43b7abf33f5b2ab480a85584df0e3ce8c76a8ca (diff)
Sametime protocol:
- Add more options to client major/minor version settings, add gui combobox (db settings ClientVersionMajor, ClientVersionMinor used and still works if set from db) Enables connect to more modern servers - More ClientIDs on combobox list. - Better list of error codes, now translateable. - Merge some 3rd party patches to meanwhile lib. https://gist.github.com/jricesterenator/c67dfbdd0887f7ecc26a https://github.com/mrcsparker/meanwhile/commit/e2299d3c70a3351ab148f4febdebceb71f7b526d https://github.com/mrcsparker/meanwhile/commit/2e68651f13aebeab9e71312e59da204d3d72092c git-svn-id: http://svn.miranda-ng.org/main/trunk@10949 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
-rw-r--r--protocols/Sametime/docs/readme.txt10
-rw-r--r--protocols/Sametime/res/resource.rc6
-rw-r--r--protocols/Sametime/src/meanwhile/src/channel.c2
-rw-r--r--protocols/Sametime/src/meanwhile/src/error.c266
-rw-r--r--protocols/Sametime/src/meanwhile/src/mw_debug.c2
-rw-r--r--protocols/Sametime/src/meanwhile/src/mw_error.h34
-rw-r--r--protocols/Sametime/src/meanwhile/src/mw_message.h2
-rw-r--r--protocols/Sametime/src/meanwhile/src/mw_srvc_conf.h2
-rw-r--r--protocols/Sametime/src/meanwhile/src/mw_srvc_dir.h1
-rw-r--r--protocols/Sametime/src/meanwhile/src/mw_srvc_place.h2
-rw-r--r--protocols/Sametime/src/meanwhile/src/mw_srvc_resolve.h1
-rw-r--r--protocols/Sametime/src/meanwhile/src/mw_st_list.h1
-rw-r--r--protocols/Sametime/src/meanwhile/src/mw_util.h2
-rw-r--r--protocols/Sametime/src/meanwhile/src/session.c2
-rw-r--r--protocols/Sametime/src/meanwhile/src/srvc_aware.c2
-rw-r--r--protocols/Sametime/src/meanwhile/src/srvc_conf.c2
-rw-r--r--protocols/Sametime/src/meanwhile/src/srvc_dir.c2
-rw-r--r--protocols/Sametime/src/meanwhile/src/srvc_ft.c2
-rw-r--r--protocols/Sametime/src/meanwhile/src/srvc_im.c1
-rw-r--r--protocols/Sametime/src/meanwhile/src/srvc_place.c2
-rw-r--r--protocols/Sametime/src/meanwhile/src/srvc_resolve.c2
-rw-r--r--protocols/Sametime/src/meanwhile/src/srvc_store.c2
-rw-r--r--protocols/Sametime/src/meanwhile/src/st_list.c8
-rw-r--r--protocols/Sametime/src/messaging.cpp4
-rw-r--r--protocols/Sametime/src/options.cpp123
-rw-r--r--protocols/Sametime/src/resource.h2
-rw-r--r--protocols/Sametime/src/sametime.h3
-rw-r--r--protocols/Sametime/src/sametime_proto.h1
-rw-r--r--protocols/Sametime/src/sametime_session.cpp17
-rw-r--r--protocols/Sametime/src/utils.cpp16
30 files changed, 416 insertions, 106 deletions
diff --git a/protocols/Sametime/docs/readme.txt b/protocols/Sametime/docs/readme.txt
index 779b498ad6..7d087ad784 100644
--- a/protocols/Sametime/docs/readme.txt
+++ b/protocols/Sametime/docs/readme.txt
@@ -14,6 +14,14 @@ http://meanwhile.sourceforge.net/
+DOCUMENTATION
+
+Sametime (TM) Community - Client Protocol. Basic RFC.
+http://meanwhile.sourceforge.net/docs/draft-houri-sametime-community-client-00.txt
+
+
+
+
KNOWN ISSUES
1)
@@ -42,7 +50,7 @@ TESTING SERVER ENVIRONMENT
https://apps.ce.collabserv.com/manage/account/public/trial/showCreateTrialAccount?country=PL&ibm-continue=Continue
see: http://www.wissel.net/blog/d6plinks/SHWL-84KE8U
-
+Use at least Sametime 8 client version
diff --git a/protocols/Sametime/res/resource.rc b/protocols/Sametime/res/resource.rc
index b0b55f294c..4a0a15c241 100644
--- a/protocols/Sametime/res/resource.rc
+++ b/protocols/Sametime/res/resource.rc
@@ -38,11 +38,11 @@ BEGIN
EDITTEXT IDC_ED_SNAME,70,57,85,14,ES_AUTOHSCROLL
RTEXT "Port:",IDC_STATIC,10,81,54,8
EDITTEXT IDC_ED_PORT,70,77,36,14,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER
- GROUPBOX "Client ID",IDC_STATIC,7,98,153,44
+ GROUPBOX "Client ID and version",IDC_STATIC,7,98,153,44
COMBOBOX IDC_CMB_CLIENT,10,109,110,107,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
EDITTEXT IDC_ED_CLIENTID,126,109,29,12,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER
- CONTROL "Use old client version",IDC_CHK_OLDDEFAULTVER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,127,145,11
- GROUPBOX "Error display",IDC_STATIC,7,143,153,53
+ COMBOBOX IDC_CMB_CLIENTVN,10,127,146,11,CBS_DROPDOWNLIST | CBS_SORT | WS_TABSTOP
+ GROUPBOX "Error display",IDC_STATIC,7,143,153,53
CONTROL "Use message boxes",IDC_RAD_ERRMB,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,156,145,10
CONTROL "Use popups",IDC_RAD_ERRPOP,"Button",BS_AUTORADIOBUTTON,10,169,145,10
CONTROL "Use system tray balloons",IDC_RAD_ERRBAL,"Button",BS_AUTORADIOBUTTON,10,182,145,10
diff --git a/protocols/Sametime/src/meanwhile/src/channel.c b/protocols/Sametime/src/meanwhile/src/channel.c
index a9dc2836be..07334c18e7 100644
--- a/protocols/Sametime/src/meanwhile/src/channel.c
+++ b/protocols/Sametime/src/meanwhile/src/channel.c
@@ -19,8 +19,6 @@
*/
#include <glib.h>
-#include <glib/ghash.h>
-#include <glib/glist.h>
#include <string.h>
#include "mw_channel.h"
diff --git a/protocols/Sametime/src/meanwhile/src/error.c b/protocols/Sametime/src/meanwhile/src/error.c
index 23c9559802..6005eddbd1 100644
--- a/protocols/Sametime/src/meanwhile/src/error.c
+++ b/protocols/Sametime/src/meanwhile/src/error.c
@@ -37,6 +37,9 @@ case val: \
m = str; \
break;
+/// Miranda NG development start
+// LPGEN - don't want depend meanwhile from miranda headers, but want to have translatable strings
+#define LPGEN(s) s
char* mwError(guint32 code) {
const char *m;
@@ -44,47 +47,106 @@ char* mwError(guint32 code) {
switch(code) {
/* 8.3.1.1 General error/success codes */
- CASE(ERR_SUCCESS, "Success");
- CASE(ERR_FAILURE, "General failure");
- CASE(ERR_REQUEST_DELAY, "Request delayed");
- CASE(ERR_REQUEST_INVALID, "Request is invalid");
- CASE(ERR_NOT_AUTHORIZED, "Not authorized");
- CASE(ERR_NO_USER, "User is not online");
- CASE(ERR_CHANNEL_NO_SUPPORT, "Requested channel is not supported");
- CASE(ERR_CHANNEL_EXISTS, "Requested channel already exists");
- CASE(ERR_SERVICE_NO_SUPPORT, "Requested service is not supported");
- CASE(ERR_PROTOCOL_NO_SUPPORT, "Requested protocol is not supported");
- CASE(ERR_VERSION_NO_SUPPORT, "Version is not supported");
- CASE(ERR_USER_SKETCHY, "User is invalid or not trusted");
- CASE(ERR_ALREADY_INITIALIZED, "Already initialized");
- CASE(ERR_ENCRYPT_NO_SUPPORT, "Encryption method not supported");
- CASE(ERR_NO_COMMON_ENCRYPT, "No common encryption method");
-
+ CASE(ERR_SUCCESS, LPGEN("Success"));
+ CASE(ERR_FAILURE, LPGEN("General failure"));
+ CASE(ERR_REQUEST_DELAY, LPGEN("Request delayed"));
+ CASE(ERR_REQUEST_INVALID, LPGEN("Request is invalid"));
+ CASE(ERR_NOT_LOGGED_IN, LPGEN("Not logged in"));
+ CASE(ERR_NOT_AUTHORIZED, LPGEN("Not authorized"));
+ CASE(ERR_ABORT, LPGEN("Operation aborted"));
+ CASE(ERR_NO_ELEMENT, LPGEN("No element"));
+ CASE(ERR_NO_USER, LPGEN("User is not online"));
+ CASE(ERR_BAD_DATA, LPGEN("Invalid data"));
+ CASE(ERR_NOT_IMPLEMENTED, LPGEN("Not implemented"));
+ CASE(ERR_UNKNOWN_ERROR, LPGEN("Unknown error"));
+ CASE(ERR_STARVING, LPGEN("Not enough resources"));
+ CASE(ERR_CHANNEL_NO_SUPPORT, LPGEN("Requested channel is not supported"));
+ CASE(ERR_CHANNEL_EXISTS, LPGEN("Requested channel already exists"));
+ CASE(ERR_SERVICE_NO_SUPPORT, LPGEN("Requested service is not supported"));
+ CASE(ERR_PROTOCOL_NO_SUPPORT, LPGEN("Requested protocol is not supported"));
+ CASE(ERR_PROTOCOL_NO_SUPPORT2, LPGEN("Requested protocol is not supported"));
+ CASE(ERR_VERSION_NO_SUPPORT, LPGEN("Version is not supported"));
+ CASE(ERR_USER_SKETCHY, LPGEN("User is invalid or not trusted"));
+ CASE(ERR_ALREADY_INITIALIZED, LPGEN("Already initialized"));
+ CASE(ERR_NOT_OWNER, LPGEN("Not an owner"));
+ CASE(ERR_TOKEN_INVALID, LPGEN("Invalid token"));
+ CASE(ERR_TOKEN_EXPIRED, LPGEN("Token expired"));
+ CASE(ERR_TOKEN_IP_MISMATCH, LPGEN("Token mismatch"));
+ CASE(ERR_PORT_IN_USE, LPGEN("Port in use"));
+ CASE(ERR_NETWORK_DEAD, LPGEN("Network error"));
+ CASE(ERR_NO_MASTER_CHANNEL, LPGEN("Master channel error"));
+ CASE(ERR_ALREADY_SUBSCRIBED, LPGEN("Already subscribed"));
+ CASE(ERR_NOT_SUBSCRIBED, LPGEN("Not subscribed"));
+ CASE(ERR_ENCRYPT_NO_SUPPORT, LPGEN("Encryption method not supported"));
+ CASE(ERR_ENCRYPT_UNINITIALIZED, LPGEN("Encryption not initialized"));
+ CASE(ERR_ENCRYPT_UNACCEPTABLE, LPGEN("Encryption too low"));
+ CASE(ERR_ENCRYPT_INVALID, LPGEN("Invalid encrypted data"));
+ CASE(ERR_NO_COMMON_ENCRYPT, LPGEN("No common encryption method"));
+ CASE(ERR_CHANNEL_DESTROYED, LPGEN("Channel destroyed"));
+ CASE(ERR_CHANNEL_REDIRECTED, LPGEN("Channel redirected"));
+ CASE(ERR_INCORRECT_ENTRY, LPGEN("Incorrect entry"));
+
/* 8.3.1.2 Connection/disconnection errors */
- CASE(VERSION_MISMATCH, "Version mismatch");
- CASE(FAT_MESSAGE, "Message is too large");
- CASE(CONNECTION_BROKEN, "Connection broken");
- CASE(CONNECTION_ABORTED, "Connection aborted");
- CASE(CONNECTION_REFUSED, "Connection refused");
- CASE(CONNECTION_RESET, "Connection reset");
- CASE(CONNECTION_TIMED, "Connection timed out");
- CASE(CONNECTION_CLOSED, "Connection closed");
- CASE(INCORRECT_LOGIN, "Incorrect Username/Password");
- CASE(VERIFICATION_DOWN, "Login verification down or unavailable");
- CASE(GUEST_IN_USE, "The guest name is currently being used");
- CASE(MULTI_SERVER_LOGIN, "Login to two different servers concurrently");
- CASE(MULTI_SERVER_LOGIN2, "Login to two different servers concurrently");
- CASE(SERVER_BROKEN, "Server misconfiguration");
+ CASE(VERSION_MISMATCH, LPGEN("Version mismatch"));
+ CASE(INSUF_BUFFER, LPGEN("Not enough buffers memory"));
+ CASE(NOT_IN_USE, LPGEN("Not in use"));
+ CASE(INSUF_SOCKET, LPGEN("Not enough sockets"));
+ CASE(HARDWARE_ERROR, LPGEN("Hardware error"));
+ CASE(NETWORK_DOWN, LPGEN("Network error"));
+ CASE(HOST_DOWN, LPGEN("Host error"));
+ CASE(HOST_UNREACHABLE, LPGEN("Host unreachable"));
+ CASE(TCPIP_ERROR, LPGEN("Internet protocol error"));
+ CASE(FAT_MESSAGE, LPGEN("Message is too large"));
+ CASE(PROXY_ERROR, LPGEN("Proxy error"));
+ CASE(SERVER_FULL, LPGEN("Server full"));
+ CASE(SERVER_NORESPOND, LPGEN("Server not responding"));
+ CASE(CANT_CONNECT, LPGEN("Connection error"));
+ CASE(USER_REMOVED, LPGEN("User removed"));
+ CASE(PROTOCOL_ERROR, LPGEN("Sametime protocol error"));
+ CASE(USER_RESTRICTED, LPGEN("User restricted"));
+ CASE(INCORRECT_LOGIN, LPGEN("Incorrect Username/Password"));
+ CASE(ENCRYPT_MISMATCH, LPGEN("Encryption mismatch"));
+ CASE(USER_UNREGISTERED, LPGEN("User unregistered"));
+ CASE(VERIFICATION_DOWN, LPGEN("Login verification down or unavailable"));
+ CASE(USER_TOO_IDLE, LPGEN("User too idle"));
+ CASE(GUEST_IN_USE, LPGEN("The guest name is currently being used"));
+ CASE(USER_EXISTS, LPGEN("User exists"));
+ CASE(USER_RE_LOGIN, LPGEN("User relogin"));
+ CASE(BAD_NAME, LPGEN("Bad name"));
+ CASE(REG_MODE_NS, LPGEN("Registration error"));
+ CASE(WRONG_USER_PRIV, LPGEN("Privilage error"));
+ CASE(NEED_EMAIL, LPGEN("Need email"));
+ CASE(DNS_ERROR, LPGEN("DNS error"));
+ CASE(DNS_FATAL_ERROR, LPGEN("DNS fatal error"));
+ CASE(DNS_NOT_FOUND, LPGEN("DNS not found"));
+ CASE(CONNECTION_BROKEN, LPGEN("Connection broken"));
+ CASE(CONNECTION_ABORTED, LPGEN("Connection aborted"));
+ CASE(CONNECTION_REFUSED, LPGEN("Connection refused"));
+ CASE(CONNECTION_RESET, LPGEN("Connection reset"));
+ CASE(CONNECTION_TIMED, LPGEN("Connection timed out"));
+ CASE(CONNECTION_CLOSED, LPGEN("Connection closed"));
+ CASE(MULTI_SERVER_LOGIN, LPGEN("Login to two different servers concurrently (1)"));
+ CASE(MULTI_SERVER_LOGIN2, LPGEN("Login to two different servers concurrently (2)"));
+ CASE(MULTI_LOGIN_COMP, LPGEN("Already logged on, disconnected"));
+ CASE(MUTLI_LOGIN_ALREADY, LPGEN("Already logged on"));
+ CASE(SERVER_BROKEN, LPGEN("Server misconfiguration"));
+ CASE(SERVER_PATH_OLD, LPGEN("Server needs upgrade"));
+ CASE(APPLET_LOGOUT, LPGEN("Applet Logout"));
/* 8.3.1.3 Client error codes */
- CASE(ERR_CLIENT_USER_GONE, "User is not online");
- CASE(ERR_CLIENT_USER_DND, "User is in Do Not Disturb mode");
- CASE(ERR_CLIENT_USER_ELSEWHERE, "Already logged in elsewhere");
+ CASE(ERR_CLIENT_USER_GONE, LPGEN("User is not online"));
+ CASE(ERR_CLIENT_USER_DND, LPGEN("User is in Do Not Disturb mode"));
+ CASE(ERR_CLIENT_USER_ELSEWHERE, LPGEN("Already logged in elsewhere"));
/* 8.3.1.4 IM error codes */
- CASE(ERR_IM_COULDNT_REGISTER, "Cannot register a reserved type");
- CASE(ERR_IM_ALREADY_REGISTERED, "Requested type is already registered");
- CASE(ERR_IM_NOT_REGISTERED, "Requested type is not registered");
+ CASE(ERR_IM_COULDNT_REGISTER, LPGEN("Cannot register a reserved type"));
+ CASE(ERR_IM_ALREADY_REGISTERED, LPGEN("Requested type is already registered"));
+ CASE(ERR_IM_NOT_REGISTERED, LPGEN("Requested type is not registered"));
+
+ /* 8.3.1.5 Resolve error codes */
+ CASE(ERR_RESOLVE_NOTCOMPLETED, LPGEN("Resolve not completed"));
+ CASE(ERR_RESOLVE_NAMENOTUNIQUE, LPGEN("Resolve name not unique"));
+ CASE(ERR_RESOLVE_NAMENOTRESOLVABLE, LPGEN("Resolve name not resolvable"));
default:
m = err_to_str(code);
@@ -93,5 +155,137 @@ char* mwError(guint32 code) {
return g_strdup(m);
}
+char* mwErrorDesc(guint32 code) {
+ const char *m;
+
+ switch (code) {
+
+ /* 8.3.1.1 General error/success codes */
+ CASE(ERR_SUCCESS, LPGEN("Operation succeeded"));
+ CASE(ERR_FAILURE, LPGEN("Operation failed"));
+ CASE(ERR_REQUEST_DELAY, LPGEN("Request accepted but will be served later"));
+ CASE(ERR_REQUEST_INVALID, LPGEN("Request is invalid due to invalid state or parameters "));
+ CASE(ERR_NOT_LOGGED_IN, LPGEN("Not logged in to community"));
+ CASE(ERR_NOT_AUTHORIZED, LPGEN("Unauthorized to perform an action or access a resource"));
+ CASE(ERR_ABORT, LPGEN("Operation has been aborted"));
+ CASE(ERR_NO_ELEMENT, LPGEN("The element is non-existent"));
+ CASE(ERR_NO_USER, LPGEN("The user is non-existent"));
+ CASE(ERR_BAD_DATA, LPGEN("The data are invalid or corrupted"));
+ CASE(ERR_NOT_IMPLEMENTED, LPGEN("The requested feature is not implemented"));
+ CASE(ERR_UNKNOWN_ERROR, LPGEN("Unknown error"));
+ CASE(ERR_STARVING, LPGEN("Not enough resources to perform the operation"));
+ CASE(ERR_CHANNEL_NO_SUPPORT, LPGEN("The requested channel is not supported"));
+ CASE(ERR_CHANNEL_EXISTS, LPGEN("The requested channel already exists"));
+ CASE(ERR_SERVICE_NO_SUPPORT, LPGEN("The requested service is not supported"));
+ CASE(ERR_PROTOCOL_NO_SUPPORT, LPGEN("The requested protocol is not supported (1)"));
+ CASE(ERR_PROTOCOL_NO_SUPPORT2, LPGEN("The requested protocol is not supported (2)"));
+ CASE(ERR_VERSION_NO_SUPPORT, LPGEN("The version is not supported"));
+ CASE(ERR_USER_SKETCHY, LPGEN("User is invalid or not trusted"));
+ CASE(ERR_ALREADY_INITIALIZED, LPGEN("Already initialized"));
+ CASE(ERR_NOT_OWNER, LPGEN("Not an owner of the requested resource"));
+ CASE(ERR_TOKEN_INVALID, LPGEN("Invalid token"));
+ CASE(ERR_TOKEN_EXPIRED, LPGEN("Token has expired"));
+ CASE(ERR_TOKEN_IP_MISMATCH, LPGEN("Token IP mismatch"));
+ CASE(ERR_PORT_IN_USE, LPGEN("WK port is in use"));
+ CASE(ERR_NETWORK_DEAD, LPGEN("Low-level network error occurred"));
+ CASE(ERR_NO_MASTER_CHANNEL, LPGEN("No master channel exists"));
+ CASE(ERR_ALREADY_SUBSCRIBED, LPGEN("Already subscribed to object(s) or event(s)"));
+ CASE(ERR_NOT_SUBSCRIBED, LPGEN("Not subscribed to object(s) or event(s)"));
+ CASE(ERR_ENCRYPT_NO_SUPPORT, LPGEN("Encryption is not supported or failed unexpectedly"));
+ CASE(ERR_ENCRYPT_UNINITIALIZED, LPGEN("Encryption mechanism has not been initialized yet"));
+ CASE(ERR_ENCRYPT_UNACCEPTABLE, LPGEN("The requested encryption level is unacceptably low"));
+ CASE(ERR_ENCRYPT_INVALID, LPGEN("The encryption data passed are invalid or or corrupted"));
+ CASE(ERR_NO_COMMON_ENCRYPT, LPGEN("There is no common encryption method"));
+ CASE(ERR_CHANNEL_DESTROYED, LPGEN("The channel is destroyed after a recommendation is made connect elsewhere"));
+ CASE(ERR_CHANNEL_REDIRECTED, LPGEN("The channel has been redirected to another destination"));
+ CASE(ERR_INCORRECT_ENTRY, LPGEN("Incorrect entry for server in cluster document"));
+
+ /* 8.3.1.3 Client error codes */
+ CASE(VERSION_MISMATCH, LPGEN("Versions don't match"));
+ CASE(INSUF_BUFFER, LPGEN("Not enough resources for connection (buffers)"));
+ CASE(NOT_IN_USE, LPGEN("Not in use"));
+ CASE(INSUF_SOCKET, LPGEN("Not enough resources for connection (socket id)"));
+ CASE(HARDWARE_ERROR, LPGEN("Hardware error occurred"));
+ CASE(NETWORK_DOWN, LPGEN("Network down"));
+ CASE(HOST_DOWN, LPGEN("Host down"));
+ CASE(HOST_UNREACHABLE, LPGEN("Host unreachable"));
+ CASE(TCPIP_ERROR, LPGEN("TCP/IP protocol error"));
+ CASE(FAT_MESSAGE, LPGEN("The message is too large"));
+ CASE(PROXY_ERROR, LPGEN("Proxy error"));
+ CASE(SERVER_FULL, LPGEN("Server is full"));
+ CASE(SERVER_NORESPOND, LPGEN("Server is not responding"));
+ CASE(CANT_CONNECT, LPGEN("Cannot connect"));
+ CASE(USER_REMOVED, LPGEN("User has been removed from the server"));
+ CASE(PROTOCOL_ERROR, LPGEN("Virtual Places protocol error"));
+ CASE(USER_RESTRICTED, LPGEN("Cannot connect because user has been restricted"));
+ CASE(INCORRECT_LOGIN, LPGEN("Incorrect login"));
+ CASE(ENCRYPT_MISMATCH, LPGEN("Encryption mismatch"));
+ CASE(USER_UNREGISTERED, LPGEN("User is unregistered"));
+ CASE(VERIFICATION_DOWN, LPGEN("Verification service down"));
+ CASE(USER_TOO_IDLE, LPGEN("User has been idle for too long"));
+ CASE(GUEST_IN_USE, LPGEN("The guest name is currently being used"));
+ CASE(USER_EXISTS, LPGEN("The user is already signed on"));
+ CASE(USER_RE_LOGIN, LPGEN("The user has signed on again"));
+ CASE(BAD_NAME, LPGEN("The name cannot be used"));
+ CASE(REG_MODE_NS, LPGEN("The registration mode is not supported"));
+ CASE(WRONG_USER_PRIV, LPGEN("User does not have appropriate privilege level"));
+ CASE(NEED_EMAIL, LPGEN("Email address must be used"));
+ CASE(DNS_ERROR, LPGEN("Error in DNS"));
+ CASE(DNS_FATAL_ERROR, LPGEN("Fatal error in DNS"));
+ CASE(DNS_NOT_FOUND, LPGEN("Server name not found"));
+ CASE(CONNECTION_BROKEN, LPGEN("The connection has been broken"));
+ CASE(CONNECTION_ABORTED, LPGEN("An established connection was aborted by the software in the host machine"));
+ CASE(CONNECTION_REFUSED, LPGEN("The connection has been refused"));
+ CASE(CONNECTION_RESET, LPGEN("The connection has been reset"));
+ CASE(CONNECTION_TIMED, LPGEN("The connection has timed out"));
+ CASE(CONNECTION_CLOSED, LPGEN("The connection has been closed"));
+ CASE(MULTI_SERVER_LOGIN, LPGEN("Disconnected due to login in two Sametime servers concurrently (1)"));
+ CASE(MULTI_SERVER_LOGIN2, LPGEN("Disconnected due to login in two Sametime servers concurrently (2)"));
+ CASE(MULTI_LOGIN_COMP, LPGEN("Disconnected due to login from another computer."));
+ CASE(MUTLI_LOGIN_ALREADY, LPGEN("Unable to log in because you are already logged on from another computer"));
+ CASE(SERVER_BROKEN, LPGEN("Unable to log in because the server is eother unreachable, or not configured properly."));
+ CASE(SERVER_PATH_OLD, LPGEN("Unable to log in to home Sametime server through the requested server, since your home server needs to be upgraded."));
+ CASE(APPLET_LOGOUT, LPGEN("The applet was logged out with this reason. Perform relogin and you will return to the former state."));
+
+ /* 8.3.1.3 Client error codes */
+ CASE(ERR_CLIENT_USER_GONE, LPGEN("The user is not online"));
+ CASE(ERR_CLIENT_USER_DND, LPGEN("The user is in do not disturb mode"));
+ CASE(ERR_CLIENT_USER_ELSEWHERE, LPGEN("Can not login because already logged in with a different user name (Java only)"));
+
+ /* 8.3.1.4 IM error codes */
+ CASE(ERR_IM_COULDNT_REGISTER, LPGEN("Cannot register a reserved type"));
+ CASE(ERR_IM_ALREADY_REGISTERED, LPGEN("The requested type is already registered"));
+ CASE(ERR_IM_NOT_REGISTERED, LPGEN("The requested type is not registered"));
+
+ /* 8.3.1.5 Resolve error codes */
+ CASE(ERR_RESOLVE_NOTCOMPLETED, LPGEN("The resolve process was not completed, but a partial response is available"));
+ CASE(ERR_RESOLVE_NAMENOTUNIQUE, LPGEN("The name was found, but is not unique (request was for unique only)"));
+ CASE(ERR_RESOLVE_NAMENOTRESOLVABLE, LPGEN("The name is not resolvable due to its format, for example an Internet email address"));
+
+ default:
+ m = LPGEN("Unknown error code");
+ break;
+ }
+
+ return g_strdup(m);
+}
+
+struct mwReturnCodeDesc *mwGetReturnCodeDesc(guint32 code) {
+ struct mwReturnCodeDesc *rcDesc = g_new(struct mwReturnCodeDesc, 1);
+
+ if (code & ERR_FAILURE)
+ rcDesc->type = mwReturnCodeError;
+ else
+ rcDesc->type = mwReturnCodeInfo;
+
+ rcDesc->codeString = g_strdup(err_to_str(code));
+ rcDesc->name = mwError(code);
+ rcDesc->description = mwErrorDesc(code);
+
+ return rcDesc;
+}
+/// Miranda NG development end
+
+
#undef CASE
diff --git a/protocols/Sametime/src/meanwhile/src/mw_debug.c b/protocols/Sametime/src/meanwhile/src/mw_debug.c
index cf47a38e38..d22d2876eb 100644
--- a/protocols/Sametime/src/meanwhile/src/mw_debug.c
+++ b/protocols/Sametime/src/meanwhile/src/mw_debug.c
@@ -19,7 +19,7 @@
*/
-#include <glib/gstring.h>
+#include <glib.h>
#include "mw_debug.h"
diff --git a/protocols/Sametime/src/meanwhile/src/mw_error.h b/protocols/Sametime/src/meanwhile/src/mw_error.h
index 6345358561..e53cc0c996 100644
--- a/protocols/Sametime/src/meanwhile/src/mw_error.h
+++ b/protocols/Sametime/src/meanwhile/src/mw_error.h
@@ -40,6 +40,22 @@ extern "C" {
#endif
+/// Miranda NG development start
+enum mwReturnCodeType {
+ mwReturnCodeInfo = 0x1000,
+ mwReturnCodeError = 0x2000
+};
+
+struct mwReturnCodeDesc {
+ guint16 type; /**< @see mwReturnCodeType */
+ char *codeString; /**< return code hex as string */
+ char *name; /**< return code name */
+ char *description; /**< return code description */
+};
+
+struct mwReturnCodeDesc *mwGetReturnCodeDesc(guint32 code);
+/// Miranda NG development end
+
/** reference to a new string appropriate for the given error code.*/
char* mwError(guint32 code);
@@ -87,7 +103,11 @@ enum ERR_GENERAL {
ERR_ENCRYPT_INVALID = 0x80000020,
ERR_NO_COMMON_ENCRYPT = 0x80000021,
ERR_CHANNEL_DESTROYED = 0x80000022,
- ERR_CHANNEL_REDIRECTED = 0x80000023
+ /// Miranda NG development start
+ //ERR_CHANNEL_REDIRECTED = 0x80000023
+ ERR_CHANNEL_REDIRECTED = 0x00000023,
+ ERR_INCORRECT_ENTRY = 0x80000239
+ /// Miranda NG development end
};
@@ -166,6 +186,18 @@ enum ERR_IM {
};
+/// Miranda NG development start
+/* 8.3.1.5 Resolve error codes */
+
+/** @enum ERR_RESOLVE
+Resolve error codes */
+enum ERR_RESOLVE {
+ ERR_RESOLVE_NOTCOMPLETED = 0x00010000,
+ ERR_RESOLVE_NAMENOTUNIQUE = 0x80020000,
+ ERR_RESOLVE_NAMENOTRESOLVABLE = 0x80030000
+};
+/// Miranda NG development end
+
#ifdef __cplusplus
}
#endif
diff --git a/protocols/Sametime/src/meanwhile/src/mw_message.h b/protocols/Sametime/src/meanwhile/src/mw_message.h
index 8402b8b7ee..a825ec271b 100644
--- a/protocols/Sametime/src/meanwhile/src/mw_message.h
+++ b/protocols/Sametime/src/meanwhile/src/mw_message.h
@@ -22,7 +22,7 @@
#define _MW_MESSAGE_H
-#include <glib/glist.h>
+#include <glib.h>
#include "mw_common.h"
diff --git a/protocols/Sametime/src/meanwhile/src/mw_srvc_conf.h b/protocols/Sametime/src/meanwhile/src/mw_srvc_conf.h
index 1447fd3830..ea162e6e73 100644
--- a/protocols/Sametime/src/meanwhile/src/mw_srvc_conf.h
+++ b/protocols/Sametime/src/meanwhile/src/mw_srvc_conf.h
@@ -22,7 +22,7 @@
#define _MW_SRVC_CONF_H
-#include <glib/glist.h>
+#include <glib.h>
#include "mw_common.h"
diff --git a/protocols/Sametime/src/meanwhile/src/mw_srvc_dir.h b/protocols/Sametime/src/meanwhile/src/mw_srvc_dir.h
index b9230bbf08..c45e850232 100644
--- a/protocols/Sametime/src/meanwhile/src/mw_srvc_dir.h
+++ b/protocols/Sametime/src/meanwhile/src/mw_srvc_dir.h
@@ -22,7 +22,6 @@
#include <glib.h>
-#include <glib/glist.h>
#ifdef __cplusplus
diff --git a/protocols/Sametime/src/meanwhile/src/mw_srvc_place.h b/protocols/Sametime/src/meanwhile/src/mw_srvc_place.h
index e17aa711c5..bba97b61e9 100644
--- a/protocols/Sametime/src/meanwhile/src/mw_srvc_place.h
+++ b/protocols/Sametime/src/meanwhile/src/mw_srvc_place.h
@@ -22,7 +22,7 @@
#define _MW_SRVC_PLACE_H
-#include <glib/glist.h>
+#include <glib.h>
#include "mw_common.h"
diff --git a/protocols/Sametime/src/meanwhile/src/mw_srvc_resolve.h b/protocols/Sametime/src/meanwhile/src/mw_srvc_resolve.h
index 436b20a5d5..5429640a1e 100644
--- a/protocols/Sametime/src/meanwhile/src/mw_srvc_resolve.h
+++ b/protocols/Sametime/src/meanwhile/src/mw_srvc_resolve.h
@@ -23,7 +23,6 @@
#include <glib.h>
-#include <glib/glist.h>
#ifdef __cplusplus
diff --git a/protocols/Sametime/src/meanwhile/src/mw_st_list.h b/protocols/Sametime/src/meanwhile/src/mw_st_list.h
index 39e1cbf84b..d54de15bac 100644
--- a/protocols/Sametime/src/meanwhile/src/mw_st_list.h
+++ b/protocols/Sametime/src/meanwhile/src/mw_st_list.h
@@ -30,7 +30,6 @@
#include <glib.h>
-#include <glib/glist.h>
#include "mw_common.h"
diff --git a/protocols/Sametime/src/meanwhile/src/mw_util.h b/protocols/Sametime/src/meanwhile/src/mw_util.h
index b8e0b7e968..a94b85131f 100644
--- a/protocols/Sametime/src/meanwhile/src/mw_util.h
+++ b/protocols/Sametime/src/meanwhile/src/mw_util.h
@@ -23,8 +23,6 @@
#include <glib.h>
-#include <glib/ghash.h>
-#include <glib/glist.h>
#define map_guint_new() \
diff --git a/protocols/Sametime/src/meanwhile/src/session.c b/protocols/Sametime/src/meanwhile/src/session.c
index 6c116b7a58..d02d3a09bd 100644
--- a/protocols/Sametime/src/meanwhile/src/session.c
+++ b/protocols/Sametime/src/meanwhile/src/session.c
@@ -450,6 +450,8 @@ static void HANDSHAKE_ACK_recv(struct mwSession *s,
property_set(s, mwSession_SERVER_VER_MAJOR, GPOINTER(msg->major), NULL);
property_set(s, mwSession_SERVER_VER_MINOR, GPOINTER(msg->minor), NULL);
+ g_message("Sametime server version (major/minor): 0x%x / 0x%x", msg->major, msg->minor);
+
/* compose the login message */
log = (struct mwMsgLogin *) mwMessage_new(mwMessage_LOGIN);
log->login_type = GUINT(property_get(s, mwSession_CLIENT_TYPE_ID));
diff --git a/protocols/Sametime/src/meanwhile/src/srvc_aware.c b/protocols/Sametime/src/meanwhile/src/srvc_aware.c
index 8c11be229f..8c399b9832 100644
--- a/protocols/Sametime/src/meanwhile/src/srvc_aware.c
+++ b/protocols/Sametime/src/meanwhile/src/srvc_aware.c
@@ -19,8 +19,6 @@
*/
#include <glib.h>
-#include <glib/ghash.h>
-#include <glib/glist.h>
#include <string.h>
#include "mw_channel.h"
diff --git a/protocols/Sametime/src/meanwhile/src/srvc_conf.c b/protocols/Sametime/src/meanwhile/src/srvc_conf.c
index f302a706f8..46d12fd849 100644
--- a/protocols/Sametime/src/meanwhile/src/srvc_conf.c
+++ b/protocols/Sametime/src/meanwhile/src/srvc_conf.c
@@ -19,8 +19,6 @@
*/
#include <glib.h>
-#include <glib/ghash.h>
-#include <glib/glist.h>
#include <stdio.h>
#include <stdlib.h>
diff --git a/protocols/Sametime/src/meanwhile/src/srvc_dir.c b/protocols/Sametime/src/meanwhile/src/srvc_dir.c
index 1505f69c53..be944429cf 100644
--- a/protocols/Sametime/src/meanwhile/src/srvc_dir.c
+++ b/protocols/Sametime/src/meanwhile/src/srvc_dir.c
@@ -18,7 +18,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#include <glib/ghash.h>
+#include <glib.h>
#include "mw_channel.h"
#include "mw_common.h"
diff --git a/protocols/Sametime/src/meanwhile/src/srvc_ft.c b/protocols/Sametime/src/meanwhile/src/srvc_ft.c
index 38479e3452..df623e5181 100644
--- a/protocols/Sametime/src/meanwhile/src/srvc_ft.c
+++ b/protocols/Sametime/src/meanwhile/src/srvc_ft.c
@@ -19,7 +19,7 @@
*/
-#include <glib/glist.h>
+#include <glib.h>
#include "mw_channel.h"
#include "mw_common.h"
diff --git a/protocols/Sametime/src/meanwhile/src/srvc_im.c b/protocols/Sametime/src/meanwhile/src/srvc_im.c
index b03991d3b9..c200487812 100644
--- a/protocols/Sametime/src/meanwhile/src/srvc_im.c
+++ b/protocols/Sametime/src/meanwhile/src/srvc_im.c
@@ -19,7 +19,6 @@
*/
#include <glib.h>
-#include <glib/glist.h>
#include <string.h>
#include "mw_channel.h"
diff --git a/protocols/Sametime/src/meanwhile/src/srvc_place.c b/protocols/Sametime/src/meanwhile/src/srvc_place.c
index 5029dffbb8..d07e886bc9 100644
--- a/protocols/Sametime/src/meanwhile/src/srvc_place.c
+++ b/protocols/Sametime/src/meanwhile/src/srvc_place.c
@@ -19,8 +19,6 @@
*/
#include <glib.h>
-#include <glib/ghash.h>
-#include <glib/glist.h>
#include <stdio.h>
#include <stdlib.h>
diff --git a/protocols/Sametime/src/meanwhile/src/srvc_resolve.c b/protocols/Sametime/src/meanwhile/src/srvc_resolve.c
index bb4c536be8..3a282291cc 100644
--- a/protocols/Sametime/src/meanwhile/src/srvc_resolve.c
+++ b/protocols/Sametime/src/meanwhile/src/srvc_resolve.c
@@ -18,7 +18,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#include <glib/ghash.h>
+#include <glib.h>
#include "mw_channel.h"
#include "mw_common.h"
diff --git a/protocols/Sametime/src/meanwhile/src/srvc_store.c b/protocols/Sametime/src/meanwhile/src/srvc_store.c
index f537195e08..edfd0281ef 100644
--- a/protocols/Sametime/src/meanwhile/src/srvc_store.c
+++ b/protocols/Sametime/src/meanwhile/src/srvc_store.c
@@ -18,7 +18,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#include <glib/glist.h>
+#include <glib.h>
#include "mw_channel.h"
#include "mw_debug.h"
diff --git a/protocols/Sametime/src/meanwhile/src/st_list.c b/protocols/Sametime/src/meanwhile/src/st_list.c
index 949696a4a1..186d5a39a3 100644
--- a/protocols/Sametime/src/meanwhile/src/st_list.c
+++ b/protocols/Sametime/src/meanwhile/src/st_list.c
@@ -20,7 +20,7 @@
#include <stdio.h>
#include <string.h>
-#include <glib/gstring.h>
+#include <glib.h>
#include "mw_debug.h"
#include "mw_util.h"
@@ -662,7 +662,9 @@ void mwSametimeList_get(struct mwGetBuffer *b, struct mwSametimeList *l) {
g_return_if_fail(b != NULL);
mwString_get(b, &str);
- list_get(str, l);
- g_free(str);
+ if (str) {
+ list_get(str, l);
+ g_free(str);
+ }
}
diff --git a/protocols/Sametime/src/messaging.cpp b/protocols/Sametime/src/messaging.cpp
index a82a574f82..55f49ea16f 100644
--- a/protocols/Sametime/src/messaging.cpp
+++ b/protocols/Sametime/src/messaging.cpp
@@ -49,9 +49,7 @@ void mwIm_conversation_closed(mwConversation* conv, guint32 err)
proto->debugLog(_T("mwIm_conversation_closed() start err=[%d]"), err);
if (err & ERR_FAILURE && err != CONNECTION_RESET) {
- char* msg = mwError(err);
- proto->showPopup(TranslateTS(_A2T(msg)), SAMETIME_POPUP_ERROR);
- g_free(msg);
+ proto->showPopup(err);
if (err == ERR_NO_COMMON_ENCRYPT && !(proto->options.encrypt_session))
proto->showPopup(TranslateT("No common encryption method. Try to enable encryption in protocol options."), SAMETIME_POPUP_INFO);
}
diff --git a/protocols/Sametime/src/options.cpp b/protocols/Sametime/src/options.cpp
index fccb78c0e5..0b97f27906 100644
--- a/protocols/Sametime/src/options.cpp
+++ b/protocols/Sametime/src/options.cpp
@@ -4,18 +4,22 @@
#define DEFAULT_ID (0x1800)
-#define NUM_IDS 20
+#define NUM_IDS 24
TCHAR* client_names[NUM_IDS] = {
_T("Official Binary Library"),
_T("Official Java Applet"),
_T("Official Binary Application"),
_T("Official Java Application"),
- _T("Notes v6.5"),
- _T("Notes v7.0"),
+ _T("Notes 6.5"),
+ _T("Notes 7.0"),
+ _T("Notes 8.0 Basic"),
+ _T("Notes 8.5.2"),
+ _T("Sametime Connect 8.0"),
+ _T("Sametime Connect 8.5.2"),
_T("ICT"),
_T("NotesBuddy"),
- _T("NotesBuddy v4.15"),
+ _T("NotesBuddy 4.15"),
_T("Sanity"),
_T("Perl"),
_T("PMR Alert"),
@@ -35,6 +39,10 @@ int client_ids[NUM_IDS] = {
0x1003,
0x1200,
0x1210,
+ 0x1215,
+ 0x1240,
+ 0x1306,
+ 0x130D,
0x1300,
0x1400,
0x1405,
@@ -51,6 +59,36 @@ int client_ids[NUM_IDS] = {
0xFFFF
};
+
+#define DEFAULT_CV_MAJOR (0x001e)
+#define DEFAULT_CV_MINOR (0x1f4b)
+
+#define NUM_CVS 5
+
+TCHAR* CV_names[NUM_CVS] = {
+ _T("Sametime (Use old client version)"),
+ _T("Sametime (Miranda default)"),
+ _T("Sametime 8"),
+ _T("Sametime 8.5.1"),
+ _T("Sametime 8.5.2")
+};
+int CV_major[NUM_CVS] = {
+ MW_PROTOCOL_VERSION_MAJOR,
+ 0x001e,
+ 0x001e,
+ 0x001e,
+ 0x001e
+};
+int CV_minor[NUM_CVS] = {
+ MW_PROTOCOL_VERSION_MINOR,
+ 0x196f,
+ 0x1f4b,
+ 0x213f,
+ 0x2149
+};
+
+
+
static INT_PTR CALLBACK DlgProcOptNet(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
CSametimeProto* proto = (CSametimeProto*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
@@ -84,7 +122,6 @@ static INT_PTR CALLBACK DlgProcOptNet(HWND hwndDlg, UINT msg, WPARAM wParam, LPA
CheckDlgButton(hwndDlg, IDC_CHK_GETSERVERCONTACTS, proto->options.get_server_contacts ? TRUE : FALSE);
CheckDlgButton(hwndDlg, IDC_CHK_ADDCONTACTS, proto->options.add_contacts ? TRUE : FALSE);
CheckDlgButton(hwndDlg, IDC_CHK_IDLEAWAY, proto->options.idle_as_away ? TRUE : FALSE);
- CheckDlgButton(hwndDlg, IDC_CHK_OLDDEFAULTVER, proto->options.use_old_default_client_ver ? TRUE : FALSE);
SendDlgItemMessage(hwndDlg, IDC_CMB_CLIENT, CB_RESETCONTENT, 0, 0);
int pos = 0;
@@ -109,6 +146,20 @@ static INT_PTR CALLBACK DlgProcOptNet(HWND hwndDlg, UINT msg, WPARAM wParam, LPA
SetDlgItemInt(hwndDlg, IDC_ED_CLIENTID, proto->options.client_id, FALSE);
}
+
+ SendDlgItemMessage(hwndDlg, IDC_CMB_CLIENTVN, CB_RESETCONTENT, 0, 0);
+ pos = 0;
+
+ for (int i = 0; i < NUM_CVS; i++) {
+ pos = SendDlgItemMessage(hwndDlg, IDC_CMB_CLIENTVN, CB_ADDSTRING, -1, (LPARAM)CV_names[i]);
+ SendDlgItemMessage(hwndDlg, IDC_CMB_CLIENTVN, CB_SETITEMDATA, pos, i);
+ if (CV_major[i] == proto->options.client_versionMajor && CV_minor[i] == proto->options.client_versionMinor) {
+ found = true;
+ SendDlgItemMessage(hwndDlg, IDC_CMB_CLIENTVN, CB_SETCURSEL, pos, 0);
+ }
+ }
+
+
if (!ServiceExists(MS_POPUP_ADDPOPUPT)) {
HWND hw = GetDlgItem(hwndDlg, IDC_RAD_ERRPOP);
EnableWindow(hw, FALSE);
@@ -138,19 +189,30 @@ static INT_PTR CALLBACK DlgProcOptNet(HWND hwndDlg, UINT msg, WPARAM wParam, LPA
SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
if (HIWORD(wParam) == CBN_SELCHANGE) {
- int sel = SendDlgItemMessage(hwndDlg, IDC_CMB_CLIENT, CB_GETCURSEL, 0, 0);
- int id = SendDlgItemMessage(hwndDlg, IDC_CMB_CLIENT, CB_GETITEMDATA, sel, 0);
- bool custom = (id == client_ids[sizeof(client_ids) / sizeof(int)-1]);
+ switch (LOWORD(wParam)) {
+ case IDC_CMB_CLIENT:
+ {
+ int sel = SendDlgItemMessage(hwndDlg, IDC_CMB_CLIENT, CB_GETCURSEL, 0, 0);
+ int id = SendDlgItemMessage(hwndDlg, IDC_CMB_CLIENT, CB_GETITEMDATA, sel, 0);
+ bool custom = (id == client_ids[sizeof(client_ids) / sizeof(int)-1]);
- if (!custom)
- SetDlgItemInt(hwndDlg, IDC_ED_CLIENTID, id, FALSE);
- else
- SetDlgItemInt(hwndDlg, IDC_ED_CLIENTID, DEFAULT_ID, FALSE);
+ if (!custom)
+ SetDlgItemInt(hwndDlg, IDC_ED_CLIENTID, id, FALSE);
+ else
+ SetDlgItemInt(hwndDlg, IDC_ED_CLIENTID, DEFAULT_ID, FALSE);
- HWND hw = GetDlgItem(hwndDlg, IDC_ED_CLIENTID);
- EnableWindow(hw, custom);
+ HWND hw = GetDlgItem(hwndDlg, IDC_ED_CLIENTID);
+ EnableWindow(hw, custom);
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ return TRUE;
+ }
+ case IDC_CMB_CLIENTVN:
+ {
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ return TRUE;
+ }
+ }
}
if (HIWORD(wParam) == BN_CLICKED) {
@@ -204,7 +266,6 @@ static INT_PTR CALLBACK DlgProcOptNet(HWND hwndDlg, UINT msg, WPARAM wParam, LPA
case IDC_CHK_USERCP:
case IDC_CHK_ADDCONTACTS:
case IDC_CHK_IDLEAWAY:
- case IDC_CHK_OLDDEFAULTVER:
case IDC_RAD_ENC:
case IDC_RAD_NOENC:
SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
@@ -258,6 +319,11 @@ static INT_PTR CALLBACK DlgProcOptNet(HWND hwndDlg, UINT msg, WPARAM wParam, LPA
}
else proto->options.client_id = id;
+ sel = SendDlgItemMessage(hwndDlg, IDC_CMB_CLIENTVN, CB_GETCURSEL, 0, 0);
+ int CVpos = SendDlgItemMessage(hwndDlg, IDC_CMB_CLIENTVN, CB_GETITEMDATA, sel, 0);
+ proto->options.client_versionMajor = CV_major[CVpos];
+ proto->options.client_versionMinor = CV_minor[CVpos];
+
if (IsDlgButtonChecked(hwndDlg, IDC_RAD_ERRMB)) proto->options.err_method = ED_MB;
else if (IsDlgButtonChecked(hwndDlg, IDC_RAD_ERRBAL)) proto->options.err_method = ED_BAL;
else if (IsDlgButtonChecked(hwndDlg, IDC_RAD_ERRPOP)) proto->options.err_method = ED_POP;
@@ -266,8 +332,6 @@ static INT_PTR CALLBACK DlgProcOptNet(HWND hwndDlg, UINT msg, WPARAM wParam, LPA
proto->options.encrypt_session = (IsDlgButtonChecked(hwndDlg, IDC_RAD_ENC) != FALSE);
proto->options.idle_as_away = (IsDlgButtonChecked(hwndDlg, IDC_CHK_IDLEAWAY) != FALSE);
- proto->options.use_old_default_client_ver = (IsDlgButtonChecked(hwndDlg, IDC_CHK_OLDDEFAULTVER) != FALSE);
-
proto->SaveOptions();
return TRUE;
@@ -316,7 +380,22 @@ void CSametimeProto::LoadOptions()
options.encrypt_session = (db_get_b(0, m_szModuleName, "EncryptSession", 0) == 1);
options.client_id = db_get_dw(0, m_szModuleName, "ClientID", DEFAULT_ID);
- options.use_old_default_client_ver = (db_get_b(0, m_szModuleName, "UseOldClientVer", 0) == 1);
+ options.client_versionMajor = db_get_dw(0, m_szModuleName, "ClientVersionMajor", DEFAULT_CV_MAJOR);
+ DWORD defaultCVMinor;
+ if (db_get_b(0, m_szModuleName, "UseOldClientVer", 0) == 1){
+ // if sb have checked old deprecated option 'Use old client version' respect it
+ defaultCVMinor = 0x001d;
+ } else {
+ defaultCVMinor = DEFAULT_CV_MINOR;
+ }
+ options.client_versionMinor = db_get_dw(0, m_szModuleName, "ClientVersionMinor", defaultCVMinor);
+
+ // one time options conversion
+ if (db_get_b(0, m_szModuleName, "UseOldClientVer", -1) != -1){
+ db_unset(0, m_szModuleName, "UseOldClientVer");
+ db_set_dw(0, m_szModuleName, "ClientVersionMajor", options.client_versionMajor);
+ db_set_dw(0, m_szModuleName, "ClientVersionMinor", options.client_versionMinor);
+ }
options.get_server_contacts = (db_get_b(0, m_szModuleName, "GetServerContacts", 1) == 1);
options.add_contacts = (db_get_b(0, m_szModuleName, "AutoAddContacts", 0) == 1);
@@ -333,7 +412,7 @@ void CSametimeProto::LoadOptions()
if (options.err_method == ED_BAL && !ServiceExists(MS_CLIST_SYSTRAY_NOTIFY)) options.err_method = ED_MB;
debugLog(_T("LoadOptions() loaded: ServerName:len=[%d], id:len=[%d], pword:len=[%d]"), options.server_name == NULL ? -1 : strlen(options.server_name), options.id == NULL ? -1 : strlen(options.id), options.pword == NULL ? -1 : strlen(options.pword));
- debugLog(_T("LoadOptions() loaded: port=[%d], encrypt_session=[%d], client_id=[%d], use_old_default_client_ver=[%d]"), options.port, options.encrypt_session, options.client_id, options.use_old_default_client_ver);
+ debugLog(_T("LoadOptions() loaded: port=[%d], encrypt_session=[%d], ClientID=[%d], ClientVersionMajor=[%d], ClientVersionMinor=[%d]"), options.port, options.encrypt_session, options.client_id, options.client_versionMajor, options.client_versionMinor);
debugLog(_T("LoadOptions() loaded: get_server_contacts=[%d], add_contacts=[%d], idle_as_away=[%d], err_method=[%d]"), options.get_server_contacts, options.add_contacts, options.idle_as_away, options.err_method);
}
@@ -349,11 +428,11 @@ void CSametimeProto::SaveOptions()
db_set_dw(0, m_szModuleName, "ServerPort", options.port);
db_set_b(0, m_szModuleName, "GetServerContacts", options.get_server_contacts ? 1 : 0);
db_set_dw(0, m_szModuleName, "ClientID", options.client_id);
+ db_set_dw(0, m_szModuleName, "ClientVersionMajor", options.client_versionMajor);
+ db_set_dw(0, m_szModuleName, "ClientVersionMinor", options.client_versionMinor);
db_set_b(0, m_szModuleName, "ErrorDisplay", options.err_method);
db_set_b(0, m_szModuleName, "AutoAddContacts", options.add_contacts ? 1 : 0);
db_set_b(0, m_szModuleName, "EncryptSession", options.encrypt_session ? 1 : 0);
db_set_b(0, m_szModuleName, "IdleAsAway", options.idle_as_away ? 1 : 0);
-
- db_set_b(0, m_szModuleName, "UseOldClientVer", options.use_old_default_client_ver ? 1 : 0);
}
diff --git a/protocols/Sametime/src/resource.h b/protocols/Sametime/src/resource.h
index 3ca8cba566..761b400d0d 100644
--- a/protocols/Sametime/src/resource.h
+++ b/protocols/Sametime/src/resource.h
@@ -24,12 +24,12 @@
#define IDC_CHK_ADDCONTACTS 1008
#define IDC_CHK_IDLEAWAY 1009
#define IDC_CMB_CLIENT 1010
+#define IDC_CMB_CLIENTVN 1016
#define IDC_ED_CLIENTID 1011
#define IDC_RAD_ERRMB 1012
#define IDC_RAD_ERRPOP 1013
#define IDC_RAD_ERRBAL 1014
#define IDC_RAD_ANSI 1015
-#define IDC_CHK_OLDDEFAULTVER 1016
#define IDC_RAD_UTF8 1017
#define IDC_CHK_USERCP 1018
#define IDC_RAD_OEM 1019
diff --git a/protocols/Sametime/src/sametime.h b/protocols/Sametime/src/sametime.h
index 7554a5d78d..d1a6f96a1a 100644
--- a/protocols/Sametime/src/sametime.h
+++ b/protocols/Sametime/src/sametime.h
@@ -62,11 +62,12 @@ typedef struct Options_tag {
int port;
bool get_server_contacts;
int client_id;
+ int client_versionMajor;
+ int client_versionMinor;
ErrorDisplay err_method;
bool add_contacts;
bool encrypt_session;
bool idle_as_away;
- bool use_old_default_client_ver;
} SametimeOptions;
typedef struct {
diff --git a/protocols/Sametime/src/sametime_proto.h b/protocols/Sametime/src/sametime_proto.h
index fd4e3a43c8..67c036fbf1 100644
--- a/protocols/Sametime/src/sametime_proto.h
+++ b/protocols/Sametime/src/sametime_proto.h
@@ -149,6 +149,7 @@ struct CSametimeProto : public PROTO<CSametimeProto>
// utils.cpp
void showPopup(const TCHAR* msg, SametimePopupEnum flag);
+ void showPopup(guint32 code);
void RegisterPopups();
void UnregisterPopups();
void RegisterGLibLogger();
diff --git a/protocols/Sametime/src/sametime_session.cpp b/protocols/Sametime/src/sametime_session.cpp
index 5abc64a675..64b5894f28 100644
--- a/protocols/Sametime/src/sametime_session.cpp
+++ b/protocols/Sametime/src/sametime_session.cpp
@@ -69,14 +69,9 @@ void CSametimeProto::InitMeanwhileServices()
mwSession_setProperty(session, mwSession_AUTH_PASSWORD, options.pword, NULL);
mwSession_setProperty(session, mwSession_CLIENT_TYPE_ID, (void*)options.client_id, NULL);
- if (options.use_old_default_client_ver) {
- mwSession_setProperty(session, mwSession_CLIENT_VER_MAJOR, GUINT_TO_POINTER(db_get_w(0, m_szModuleName, "ClientVersionMajor", MW_PROTOCOL_VERSION_MAJOR)), 0);
- mwSession_setProperty(session, mwSession_CLIENT_VER_MINOR, GUINT_TO_POINTER(db_get_w(0, m_szModuleName, "ClientVersionMinor", MW_PROTOCOL_VERSION_MINOR)), 0);
- }
- else {
- mwSession_setProperty(session, mwSession_CLIENT_VER_MAJOR, GUINT_TO_POINTER(db_get_w(0, m_szModuleName, "ClientVersionMajor", 0x001e)), 0);
- mwSession_setProperty(session, mwSession_CLIENT_VER_MINOR, GUINT_TO_POINTER(db_get_w(0, m_szModuleName, "ClientVersionMinor", 0x196f)), 0);
- }
+ mwSession_setProperty(session, mwSession_CLIENT_VER_MAJOR, (void*)options.client_versionMajor, NULL);
+ mwSession_setProperty(session, mwSession_CLIENT_VER_MINOR, (void*)options.client_versionMinor, NULL);
+
}
void CSametimeProto::DeinitMeanwhileServices()
@@ -111,11 +106,7 @@ void __cdecl SessionStateChange(mwSession* session, mwSessionState state, gpoint
case mwSession_STOPPING:
if ((int)info) {// & ERR_FAILURE) {
- char *msg = mwError((int)info);
- TCHAR *msgT = mir_utf8decodeT(msg);
- proto->showPopup(TranslateTS(msgT), SAMETIME_POPUP_ERROR);
- mir_free(msgT);
- g_free(msg);
+ proto->showPopup((int)info);
}
proto->SessionStopping();
break;
diff --git a/protocols/Sametime/src/utils.cpp b/protocols/Sametime/src/utils.cpp
index 6c8964e8a0..eeccb5a661 100644
--- a/protocols/Sametime/src/utils.cpp
+++ b/protocols/Sametime/src/utils.cpp
@@ -138,6 +138,22 @@ void CSametimeProto::showPopup(const TCHAR* msg, SametimePopupEnum flag)
CallFunctionAsync(sttMainThreadCallback, puData);
}
+void CSametimeProto::showPopup(guint32 code)
+{
+ struct mwReturnCodeDesc *rcDesc = mwGetReturnCodeDesc(code);
+
+ SametimePopupEnum flag = (rcDesc->type == mwReturnCodeError ? SAMETIME_POPUP_ERROR : SAMETIME_POPUP_INFO);
+ TCHAR buff[512];
+ mir_sntprintf(buff, SIZEOF(buff), TranslateT("%s\n\nSametime error %S\n%s"), TranslateTS(_A2T(rcDesc->name)), rcDesc->codeString, TranslateTS(_A2T(rcDesc->description)));
+
+ showPopup(buff, flag);
+ debugLog(buff);
+
+ g_free(rcDesc->codeString);
+ g_free(rcDesc->name);
+ g_free(rcDesc->description);
+ g_free(rcDesc);
+}
void LogFromGLib(const gchar* log_domain, GLogLevelFlags log_level, const gchar* message, gpointer user_data)
{