Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • protocols/jabber/jabber.c

    r75a4b85 r75cde5d  
    471471}
    472472
    473 static gboolean jabber_callback(gpointer data, gint source, b_input_condition condition)
     473static void jabber_callback(gpointer data, gint source, GaimInputCondition condition)
    474474{
    475475        struct gaim_connection *gc = (struct gaim_connection *)data;
     
    477477
    478478        gjab_recv(jd->gjc);
    479        
    480         return TRUE;
    481479}
    482480
     
    489487}
    490488
    491 static gboolean gjab_connected(gpointer data, gint source, b_input_condition cond)
     489static void gjab_connected(gpointer data, gint source, GaimInputCondition cond)
    492490{
    493491        xmlnode x;
     
    499497        if (!g_slist_find(get_connections(), gc)) {
    500498                closesocket(source);
    501                 return FALSE;
     499                return;
    502500        }
    503501
     
    510508        if (source == -1) {
    511509                STATE_EVT(JCONN_STATE_OFF)
    512                 return FALSE;
     510                return;
    513511        }
    514512
     
    532530
    533531        gc = GJ_GC(gjc);
    534         gc->inpa = b_input_add(gjc->fd, GAIM_INPUT_READ, jabber_callback, gc);
    535        
    536         return FALSE;
    537 }
    538 
    539 static gboolean gjab_connected_ssl(gpointer data, void *source, b_input_condition cond)
     532        gc->inpa = gaim_input_add(gjc->fd, GAIM_INPUT_READ, jabber_callback, gc);
     533}
     534
     535static void gjab_connected_ssl(gpointer data, void *source, GaimInputCondition cond)
    540536{
    541537        struct gaim_connection *gc = data;
     
    548544        if (source == NULL) {
    549545                STATE_EVT(JCONN_STATE_OFF)
    550                 return FALSE;
     546                return;
    551547        }
    552548       
    553549        if (!g_slist_find(get_connections(), gc)) {
    554550                ssl_disconnect(source);
    555                 return FALSE;
     551                return;
    556552        }
    557553       
    558         return gjab_connected(data, gjc->fd, cond);
     554        gjab_connected(data, gjc->fd, cond);
    559555}
    560556
    561557static void gjab_start(gjconn gjc)
    562558{
    563         account_t *acc;
     559        struct aim_user *user;
    564560        int port = -1, ssl = 0;
    565         char *server = NULL;
     561        char *server = NULL, *s;
    566562
    567563        if (!gjc || gjc->state != JCONN_STATE_OFF)
    568564                return;
    569565
    570         acc = GJ_GC(gjc)->acc;
    571         server = acc->server;
    572         port = set_getint(&acc->set, "port");
    573         ssl = set_getbool(&acc->set, "ssl");
     566        user = GJ_GC(gjc)->user;
     567        if (*user->proto_opt[0]) {
     568                /* If there's a dot, assume there's a hostname in the beginning */
     569                if (strchr(user->proto_opt[0], '.')) {
     570                        server = g_strdup(user->proto_opt[0]);
     571                        if ((s = strchr(server, ':')))
     572                                *s = 0;
     573                }
     574               
     575                /* After the hostname, there can be a port number */
     576                s = strchr(user->proto_opt[0], ':');
     577                if (s && isdigit(s[1]))
     578                        sscanf(s + 1, "%d", &port);
     579               
     580                /* And if there's the string ssl, the user wants an SSL-connection */
     581                if (strstr(user->proto_opt[0], ":ssl") || g_strcasecmp(user->proto_opt[0], "ssl") == 0)
     582                        ssl = 1;
     583        }
    574584       
    575         if (port < JABBER_PORT_MIN || port > JABBER_PORT_MAX) {
     585        if (port == -1 && !ssl)
     586                port = DEFAULT_PORT;
     587        else if (port == -1 && ssl)
     588                port = DEFAULT_PORT_SSL;
     589        else if (port < JABBER_PORT_MIN || port > JABBER_PORT_MAX) {
    576590                serv_got_crap(GJ_GC(gjc), "For security reasons, the Jabber port number must be in the %d-%d range.", JABBER_PORT_MIN, JABBER_PORT_MAX);
    577591                STATE_EVT(JCONN_STATE_OFF)
     
    596610        }
    597611       
    598         if (!acc->gc || (gjc->fd < 0)) {
     612        g_free(server);
     613       
     614        if (!user->gc || (gjc->fd < 0)) {
    599615                STATE_EVT(JCONN_STATE_OFF)
    600616                return;
     
    14961512}
    14971513
    1498 static void jabber_acc_init(account_t *acc)
    1499 {
    1500         set_t *s;
    1501        
    1502         s = set_add( &acc->set, "port", "5222", set_eval_int, acc );
    1503         s->flags |= ACC_SET_OFFLINE_ONLY;
    1504        
    1505         s = set_add( &acc->set, "resource", "BitlBee", NULL, acc );
    1506         s->flags |= ACC_SET_OFFLINE_ONLY;
    1507        
    1508         s = set_add( &acc->set, "server", NULL, set_eval_account, acc );
    1509         s->flags |= ACC_SET_NOSAVE | ACC_SET_OFFLINE_ONLY;
    1510        
    1511         s = set_add( &acc->set, "ssl", "false", set_eval_bool, acc );
    1512         s->flags |= ACC_SET_OFFLINE_ONLY;
    1513 }
    1514 
    1515 static void jabber_login(account_t *acc)
    1516 {
    1517         struct gaim_connection *gc;
    1518         struct jabber_data *jd;
    1519         char *resource, *loginname;
    1520        
    1521         /* Time to move some data/things from the old syntax to the new one: */
    1522         if (acc->server) {
    1523                 char *s, *tmp_server;
    1524                 int port;
    1525                
    1526                 if (g_strcasecmp(acc->server, "ssl") == 0) {
    1527                         set_setstr(&acc->set, "server", "");
    1528                         set_setint(&acc->set, "port", DEFAULT_PORT_SSL);
    1529                         set_setstr(&acc->set, "ssl", "true");
    1530                        
    1531                         g_free(acc->server);
    1532                         acc->server = NULL;
    1533                 } else if ((s = strchr(acc->server, ':'))) {
    1534                         if (strstr(acc->server, ":ssl")) {
    1535                                 set_setint(&acc->set, "port", DEFAULT_PORT_SSL);
    1536                                 set_setstr(&acc->set, "ssl", "true");
    1537                         }
    1538                         if (isdigit(s[1])) {
    1539                                 if (sscanf(s + 1, "%d", &port) == 1)
    1540                                         set_setint(&acc->set, "port", port);
    1541                         }
    1542                         tmp_server = g_strndup(acc->server, s - acc->server);
    1543                         set_setstr(&acc->set, "server", tmp_server);
    1544                         g_free(tmp_server);
    1545                 }
    1546         }
    1547        
    1548         gc = new_gaim_conn(acc);
    1549         jd = gc->proto_data = g_new0(struct jabber_data, 1);
    1550        
    1551         if( strchr( acc->user, '@' ) == NULL )
    1552         {
    1553                 hide_login_progress( gc, "Invalid account name" );
    1554                 signoff( gc );
    1555                 return;
    1556         }
    1557        
    1558         resource = set_getstr(&acc->set, "resource");
    1559         loginname = create_valid_jid(acc->user, DEFAULT_SERVER, resource);
    1560        
     1514static void jabber_login(struct aim_user *user)
     1515{
     1516        struct gaim_connection *gc = new_gaim_conn(user);
     1517        struct jabber_data *jd = gc->proto_data = g_new0(struct jabber_data, 1);
     1518        char *loginname = create_valid_jid(user->username, DEFAULT_SERVER, "BitlBee");
     1519
    15611520        jd->hash = g_hash_table_new(g_str_hash, g_str_equal);
    15621521        jd->chats = NULL;       /* we have no chats yet */
     
    15641523        set_login_progress(gc, 1, _("Connecting"));
    15651524
    1566         if (!(jd->gjc = gjab_new(loginname, acc->pass, gc))) {
     1525        if (!(jd->gjc = gjab_new(loginname, user->password, gc))) {
    15671526                g_free(loginname);
    15681527                hide_login_progress(gc, _("Unable to connect"));
     
    15841543}
    15851544
    1586 static gboolean jabber_free(gpointer data, gint fd, b_input_condition cond)
     1545static gboolean jabber_free(gpointer data)
    15871546{
    15881547        struct jabber_data *jd = data;
     
    16291588        }
    16301589        if (gc->inpa)
    1631                 b_event_remove(gc->inpa);
     1590                gaim_input_remove(gc->inpa);
    16321591
    16331592        if(jd) {
    1634                 b_timeout_add(50, jabber_free, jd);
     1593                g_timeout_add(50, jabber_free, jd);
    16351594                if(jd->gjc != NULL)
    16361595                        xmlnode_free(jd->gjc->current);
     
    23742333        ret->name = "jabber";
    23752334        ret->away_states = jabber_away_states;
    2376         ret->acc_init = jabber_acc_init;
    23772335        ret->login = jabber_login;
    23782336        ret->close = jabber_close;
     
    23872345        ret->alias_buddy = jabber_roster_update;
    23882346        ret->group_buddy = jabber_group_change;
    2389         ret->handle_cmp = g_strcasecmp;
     2347        ret->cmp_buddynames = g_strcasecmp;
    23902348
    23912349        register_protocol (ret);
Note: See TracChangeset for help on using the changeset viewer.