X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=clients%2Fgaim%2Fgaim-dolcon.c;h=eedaa552cda5e0dadfc9a2d115f0091f8bd87869;hb=878a4636e2057d6311652d11e52d6c224cd7d035;hp=cecab2feef0215094c2b7cc6533681c09ab8cd61;hpb=ccea96e5cebe157677bb34ec2223bdf36b9162da;p=doldaconnect.git diff --git a/clients/gaim/gaim-dolcon.c b/clients/gaim/gaim-dolcon.c index cecab2f..eedaa55 100644 --- a/clients/gaim/gaim-dolcon.c +++ b/clients/gaim/gaim-dolcon.c @@ -93,11 +93,14 @@ static void newpeercb(struct dc_fnetpeer *peer) { struct conndata *data; GaimConversation *conv; + char *buf; data = peer->fn->udata; if((conv = gaim_find_chat(data->gc, peer->fn->id)) != NULL) { - gaim_conv_chat_add_user(GAIM_CONV_CHAT(conv), icswcstombs(peer->nick, "UTF-8", NULL), NULL, GAIM_CBFLAGS_NONE, TRUE); + buf = sprintf2("%i:%s", peer->fn->id, icswcstombs(peer->nick, "UTF-8", NULL)); + gaim_conv_chat_add_user(GAIM_CONV_CHAT(conv), buf, NULL, GAIM_CBFLAGS_NONE, TRUE); + free(buf); } } @@ -105,11 +108,14 @@ static void delpeercb(struct dc_fnetpeer *peer) { struct conndata *data; GaimConversation *conv; + char *buf; data = peer->fn->udata; if((conv = gaim_find_chat(data->gc, peer->fn->id)) != NULL) { - gaim_conv_chat_remove_user(GAIM_CONV_CHAT(conv), icswcstombs(peer->nick, "UTF-8", NULL), NULL); + buf = sprintf2("%i:%s", peer->fn->id, icswcstombs(peer->nick, "UTF-8", NULL)); + gaim_conv_chat_remove_user(GAIM_CONV_CHAT(conv), buf, NULL); + free(buf); } } @@ -144,7 +150,6 @@ static void logincb(int err, wchar_t *reason, struct conndata *data) return; } gaim_connection_set_state(data->gc, GAIM_CONNECTED); - serv_finish_login(data->gc); dc_queuecmd(NULL, NULL, L"notify", L"fn:chat", L"on", L"fn:act", L"on", L"fn:peer", L"on", NULL); dc_getfnlistasync((void (*)(int, void *))getfnlistcb, data); } @@ -188,17 +193,18 @@ static void dcfdcb(struct conndata *data, int fd, GaimInputCondition condition) if((conv = gaim_find_chat(data->gc, fn->id)) != NULL) { peer = icwcstombs(ires->argv[3].val.str, "UTF-8"); - msg = gaim_escape_html(icswcstombs(ires->argv[4].val.str, "UTF-8", NULL)); + /* XXX: No more gaim_escape_html?! */ + msg = sstrdup(icswcstombs(ires->argv[4].val.str, "UTF-8", NULL)); serv_got_chat_in(data->gc, gaim_conv_chat_get_id(GAIM_CONV_CHAT(conv)), peer, 0, msg, time(NULL)); - g_free(msg); + free(msg); free(peer); } } else { - peer = icwcstombs(ires->argv[3].val.str, "UTF-8"); - msg = gaim_escape_html(icswcstombs(ires->argv[4].val.str, "UTF-8", NULL)); - if(!gaim_account_get_bool(data->gc->account, "represspm", FALSE) || (gaim_find_conversation_with_account(peer, data->gc->account) != NULL)) + peer = sprintf2("%i:%s", fn->id, icswcstombs(ires->argv[3].val.str, "UTF-8", NULL)); + msg = sstrdup(icswcstombs(ires->argv[4].val.str, "UTF-8", NULL)); + if(!gaim_account_get_bool(data->gc->account, "represspm", FALSE) || (gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, peer, data->gc->account) != NULL)) serv_got_im(data->gc, peer, msg, 0, time(NULL)); - g_free(msg); + free(msg); free(peer); } } @@ -208,6 +214,7 @@ static void dcfdcb(struct conndata *data, int fd, GaimInputCondition condition) case 601: case 602: case 603: + break; case 604: if((ires = dc_interpret(resp)) != NULL) { @@ -220,15 +227,17 @@ static void dcfdcb(struct conndata *data, int fd, GaimInputCondition condition) } dc_freeires(ires); } + break; case 605: break; } } + dc_freeresp(resp); } updatewrite(data); } -static int gi_sendchat(GaimConnection *gc, int id, const char *what) +static int gi_sendchat(GaimConnection *gc, int id, const char *what, GaimMessageFlags flags) { struct conndata *data; struct dc_fnetnode *fn; @@ -246,32 +255,32 @@ static int gi_sendchat(GaimConnection *gc, int id, const char *what) return(0); } -static int gi_sendim(GaimConnection *gc, const char *who, const char *what, GaimConvImFlags flags) +static int gi_sendim(GaimConnection *gc, const char *who, const char *what, GaimMessageFlags flags) { struct conndata *data; - struct dc_fnetnode *fn, *tfn; - struct dc_fnetpeer *peer, *tpeer; - wchar_t *wwho, *wwhat; - int en; + struct dc_fnetnode *fn; + struct dc_fnetpeer *peer; + wchar_t *wwho, *wwhat, *p; + int en, id; data = gc->proto_data; if((wwho = icmbstowcs((char *)who, "UTF-8")) == NULL) return(-errno); - tpeer = NULL; - for(fn = dc_fnetnodes; fn != NULL; fn = fn->next) { - for(peer = fn->peers; peer != NULL; peer = peer->next) { - if(!wcscmp(wwho, peer->nick)) { - if(tpeer == NULL) { - tpeer = peer; - tfn = fn; - } else { - free(wwho); - return(-ESRCH); - } - } - } + if((p = wcschr(wwho, L':')) == NULL) { + free(wwho); + return(-ESRCH); + } + *(p++) = L'\0'; + id = wcstol(wwho, NULL, 10); + if((fn = dc_findfnetnode(id)) == NULL) { + free(wwho); + return(-ESRCH); } - if(tpeer == NULL) { + for(peer = fn->peers; peer != NULL; peer = peer->next) { + if(!wcscmp(peer->nick, p)) + break; + } + if(peer == NULL) { free(wwho); return(-ESRCH); } @@ -280,7 +289,7 @@ static int gi_sendim(GaimConnection *gc, const char *who, const char *what, Gaim free(wwho); return(-en); } - dc_queuecmd(NULL, NULL, L"sendchat", L"%%i", tfn->id, L"0", L"%%ls", wwho, L"%%ls", wwhat, NULL); + dc_queuecmd(NULL, NULL, L"sendchat", L"%%i", fn->id, L"0", L"%%ls", peer->nick, L"%%ls", wwhat, NULL); free(wwho); free(wwhat); updatewrite(data); @@ -395,33 +404,25 @@ static void gi_cancelgetlist(GaimRoomlist *rl) } } -static void getpeerlistcb(struct dc_fnetnode *fn, int resp, struct conndata *data) -{ - GaimConversation *conv; - struct dc_fnetpeer *peer; - - if(resp == 200) - { - if(gaim_find_chat(data->gc, fn->id) != NULL) - return; - conv = serv_got_joined_chat(data->gc, fn->id, icswcstombs(fn->name, "UTF-8", NULL)); - for(peer = fn->peers; peer != NULL; peer = peer->next) - gaim_conv_chat_add_user(GAIM_CONV_CHAT(conv), icswcstombs(peer->nick, "UTF-8", NULL), NULL, GAIM_CBFLAGS_NONE, FALSE); - } -} - static void gi_joinchat(GaimConnection *gc, GHashTable *chatdata) { struct conndata *data; struct dc_fnetnode *fn; + GaimConversation *conv; + struct dc_fnetpeer *peer; + char *buf; data = gc->proto_data; if((fn = dc_findfnetnode(GPOINTER_TO_INT(g_hash_table_lookup(chatdata, "id")))) == NULL) return; if(gaim_find_chat(gc, fn->id) != NULL) return; - dc_getpeerlistasync(fn, (void (*)(struct dc_fnetnode *, int, void *))getpeerlistcb, data); - updatewrite(data); + conv = serv_got_joined_chat(data->gc, fn->id, icswcstombs(fn->name, "UTF-8", NULL)); + for(peer = fn->peers; peer != NULL; peer = peer->next) { + buf = sprintf2("%i:%s", fn->id, icswcstombs(peer->nick, "UTF-8", NULL)); + gaim_conv_chat_add_user(GAIM_CONV_CHAT(conv), buf, NULL, GAIM_CBFLAGS_NONE, FALSE); + free(buf); + } } static GaimPluginProtocolInfo protinfo = {