diff -r f78ffe7ce43d -r a8ceaa3005fd mcabber/src/jabglue.c --- a/mcabber/src/jabglue.c Mon Apr 04 18:00:51 2005 +0000 +++ b/mcabber/src/jabglue.c Mon Apr 04 19:13:58 2005 +0000 @@ -92,9 +92,7 @@ return alias; } -jconn jb_connect(const char *servername, unsigned int port, int ssl, - const char *jid, const char *pass, - const char *resource) +jconn jb_connect(const char *jid, unsigned int port, int ssl, const char *pass) { if (!port) { if (ssl) @@ -106,16 +104,14 @@ if (jc) free(jc); - //jc = jab_new(jid, pass, port, ssl); - jc = jab_new("mctest@lilotux.net/mcabber", (char*)pass, (int)port, ssl); + jc = jab_new(jid, pass, port, ssl); - jab_logger(jc, big_logger); + jab_logger(jc, file_logger); jab_packet_handler(jc, &packethandler); jab_state_handler(jc, &statehandler); if (jc->user) { //fonline = TRUE; - scr_LogPrint("+ State_Connecting"); jstate = STATE_CONNECTING; statehandler(0, -1); jab_start(jc); @@ -215,7 +211,7 @@ */ if (!msg || !*msg) { - msg = "unknownStatus"; + msg = "unknownStatus"; // FIXME //msg = imstatus2str(st); } @@ -230,6 +226,13 @@ // XXX logger.putourstatus(proto, getstatus(), ourstatus = st); } +void jb_send_msg(const char *jid, const char *text) +{ + xmlnode x = jutil_msgnew(TMSG_CHAT, jid, 0, text); + jab_send(jc, x); + xmlnode_free(x); +} + void postlogin() { //int i; @@ -239,6 +242,7 @@ //setautostatus(jhook.manualstatus); + setjabberstatus(1, "I'm here!"); /* for (i = 0; i < clist.count; i++) { c = (icqcontact *) clist.at(i); @@ -309,14 +313,20 @@ if (z) group = xmlnode_get_data(z); if (alias) { - char *buddyname = jidtodisp(alias); - if (buddyname) { - scr_LogPrint("New buddy: %s", buddyname); + char *buddyname; + if (name) + buddyname = name; + else + buddyname = jidtodisp(alias); + + //scr_LogPrint("New buddy: %s", buddyname); + bud_AddBuddy(alias, buddyname); + if (!name) free(buddyname); - } } } + bud_SortRoster(); postlogin(); } @@ -326,20 +336,25 @@ char *u, *h, *r; jidsplit(from, &u, &h, &r); - if (*r) - scr_LogPrint("There is an extra part in message: %s", *r); - scr_WriteIncomingMessage(from, body); + /* + // Maybe we should remember the resource? + if (r) + scr_LogPrint("There is an extra part in message (resource?): %s", r); + */ + + scr_LogPrint("Msg from <%s>, type=%s", jidtodisp(from), type); + scr_WriteIncomingMessage(jidtodisp(from), body); } void statehandler(jconn conn, int state) { static int previous_state = -1; - scr_LogPrint("StateHandler called (%d).\n", state); - ut_WriteLog("StateHandler called (%d).\n", state); + ut_WriteLog("StateHandler called (state=%d).\n", state); switch(state) { case JCONN_STATE_OFF: + scr_LogPrint("+ JCONN_STATE_OFF"); /* jhook.flogged = jhook.fonline = FALSE; @@ -348,22 +363,27 @@ jhook.log(logDisconnected); jhook.roster.clear(); jhook.agents.clear(); - clist.setoffline(jhook.proto); - face.update(); } */ break; case JCONN_STATE_CONNECTED: + scr_LogPrint("+ JCONN_STATE_CONNECTED"); break; case JCONN_STATE_AUTH: + scr_LogPrint("+ JCONN_STATE_AUTH"); break; case JCONN_STATE_ON: + scr_LogPrint("+ JCONN_STATE_ON"); // if (regmode) jhook.fonline = TRUE; break; + case JCONN_STATE_CONNECTING: + scr_LogPrint("+ JCONN_STATE_CONNECTING"); + break; + default: break; } @@ -378,13 +398,10 @@ char *from=NULL, *type=NULL, *body=NULL, *enc=NULL; char *ns=NULL; char *id=NULL; - // imstatus ust; + enum imstatus ust; // int npos; // bool isagent; - scr_LogPrint("Received a packet"); - ut_WriteLog("Received a packet\n"); - jpacket_reset(packet); p = xmlnode_get_attrib(packet->x, "from"); if (p) from = p; @@ -417,19 +434,13 @@ } } - // FIXME: if (body) { - scr_LogPrint("Message received"); - scr_LogPrint("Type: %s", type); gotmessage(type, from, body, enc); } - break; case JPACKET_IQ: if (!strcmp(type, "result")) { - scr_LogPrint("Received a result packet"); - ut_WriteLog("Received a result packet\n"); if (p = xmlnode_get_attrib(packet->x, "id")) { int iid = atoi(p); @@ -588,68 +599,30 @@ case JPACKET_PRESENCE: x = xmlnode_get_tag(packet->x, "show"); - //ust = available; + ust = available; if (x) { p = xmlnode_get_data(x); if (p) ns = p; if (ns) { - scr_LogPrint("New status: %s", ns); - /* - if (ns == "away") ust = away; else - if (ns == "dnd") ust = dontdisturb; else - if (ns == "xa") ust = notavail; else - if (ns == "chat") ust = freeforchat; - */ + scr_LogPrint("New status: %s (%s)", ns, from); + if (!strcmp(ns, "away")) ust = away; + else if (!strcmp(ns, "dnd")) ust = dontdisturb; + else if (!strcmp(ns, "xa")) ust = notavail; + else if (!strcmp(ns, "chat")) ust = freeforchat; } } - if (!strcmp(type, "unavailable")) { + if (type && !strcmp(type, "unavailable")) { scr_LogPrint("New status: unavailable/offline"); - // XXX - // ust = offline; + ust = offline; } + bud_SetBuddyStatus(jidtodisp(from), ust); /* - jidsplit(from, u, h, s); - id = u + "@" + h; - - if (clist.get(imcontact((string) "#" + id, jhook.proto))) { - if (ust == offline) { - vector::iterator im = find(jhook.chatmembers[id].begin(), jhook.chatmembers[id].end(), s); - if (im != jhook.chatmembers[id].end()) - jhook.chatmembers[id].erase(im); - - } else { - jhook.chatmembers[id].push_back(s); - - } - - } else { - icqcontact *c = clist.get(ic); - - if (c) - if (c->getstatus() != ust) { - if (c->getstatus() == offline) - jhook.awaymsgs[ic.nickname] = ""; - - logger.putonline(c, c->getstatus(), ust); - c->setstatus(ust); - - if (x = xmlnode_get_tag(packet->x, "status")) - if (p = xmlnode_get_data(x)) - jhook.awaymsgs[ic.nickname] = p; - -#ifdef HAVE_GPGME - if (x = xmlnode_get_tag(packet->x, "x")) - if (p = xmlnode_get_attrib(x, "xmlns")) - if ((string) p == "jabber:x:signed") - if (p = xmlnode_get_data(x)) - c->setpgpkey(pgp.verify(p, jhook.awaymsgs[ic.nickname])); -#endif - - } - } + if (x = xmlnode_get_tag(packet->x, "status")) + if (p = xmlnode_get_data(x)) + scr_LogPrint("Away msg: %s", p); */ break;