From: fredrik Date: Thu, 12 Apr 2007 01:01:52 +0000 (+0000) Subject: Understand new connect stanza. X-Git-Tag: 0.3~14 X-Git-Url: http://git.dolda2000.com/gitweb/?p=doldaconnect.git;a=commitdiff_plain;h=5e1e52f14fabed501d62d56fecc0b91d972e5673 Understand new connect stanza. git-svn-id: svn+ssh://svn.dolda2000.com/srv/svn/repos/src/doldaconnect@923 959494ce-11ee-0310-bf91-de5d638817bd --- diff --git a/clients/gaim/gaim-dolcon.c b/clients/gaim/gaim-dolcon.c index 5aad9ae..6d29726 100644 --- a/clients/gaim/gaim-dolcon.c +++ b/clients/gaim/gaim-dolcon.c @@ -170,14 +170,19 @@ static void dcfdcb(struct conndata *data, int fd, GaimInputCondition condition) } while((resp = dc_getresp()) != NULL) { if(!wcscmp(resp->cmdname, L".connect")) { - if(resp->code == 200) { - gaim_connection_update_progress(data->gc, "Authenticating", 2, 3); - dc_loginasync(NULL, 1, (int (*)(int, wchar_t *, char **, void *))loginconv, (void (*)(int, wchar_t *, void *))logincb, data); - } else { + if(resp->code != 201) { dc_disconnect(); disconnected(data); gaim_connection_error(data->gc, "Server refused connection"); return; + } else if(dc_checkprotocol(resp, DC_LATEST)) { + dc_disconnect(); + disconnected(data); + gaim_connection_error(data->gc, "Server protocol revision mismatch"); + return; + } else { + gaim_connection_update_progress(data->gc, "Authenticating", 2, 3); + dc_loginasync(NULL, 1, (int (*)(int, wchar_t *, char **, void *))loginconv, (void (*)(int, wchar_t *, void *))logincb, data); } } else if(!wcscmp(resp->cmdname, L".notify")) { dc_uimisc_handlenotify(resp); diff --git a/clients/gnome-trans-applet/conduit-dclib.c b/clients/gnome-trans-applet/conduit-dclib.c index 2089f7f..c267db2 100644 --- a/clients/gnome-trans-applet/conduit-dclib.c +++ b/clients/gnome-trans-applet/conduit-dclib.c @@ -195,12 +195,12 @@ static void dcfdcb(struct conduit *conduit, int fd, GdkInputCondition condition) { if(!wcscmp(resp->cmdname, L".connect")) { - if(resp->code == 200) + if(dc_checkprotocol(resp, DC_LATEST)) { - dc_loginasync(NULL, 1, noconv, (void (*)(int, wchar_t *, void *))logincb, conduit); - } else { dc_disconnect(); disconnected(conduit); + } else { + dc_loginasync(NULL, 1, noconv, (void (*)(int, wchar_t *, void *))logincb, conduit); } } else if(!wcscmp(resp->cmdname, L".notify")) { dc_uimisc_handlenotify(resp); diff --git a/clients/gtk2/main.c b/clients/gtk2/main.c index 643d975..aebeaac 100644 --- a/clients/gtk2/main.c +++ b/clients/gtk2/main.c @@ -1067,16 +1067,20 @@ void handleresps(void) { if(!wcscmp(resp->cmdname, L".connect")) { - if(resp->code == 200) + if(resp->code != 201) { + msgbox(GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("The server refused the connection")); + dc_disconnect(); + dcdisconnected(); + } else if(dc_checkprotocol(resp, DC_LATEST)) { + msgbox(GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Server protocol revision mismatch")); + dc_disconnect(); + dcdisconnected(); + } else { tosbuf = 0x10; /* Minimum cost */ setsockopt(dcfd, SOL_IP, IP_TOS, &tosbuf, sizeof(tosbuf)); updatesbar(_("Connected")); dc_loginasync(connectas, 1, loginconv, logincallback, NULL); - } else { - msgbox(GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("The server refused the connection")); - dc_disconnect(); - dcdisconnected(); } } else if(!wcscmp(resp->cmdname, L".notify")) { dc_uimisc_handlenotify(resp);