Changeset 104

Show
Ignore:
Timestamp:
02/22/02 17:20:33 (7 years ago)
Author:
jajcus
Message:

- auto reconnect (to gg server) support

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/jggtrans.xml

    r102 r104  
    111111       So let's give it a year :-) --> 
    112112  <pong_timeout>31536000</pong_timeout> 
    113                       
     113 
     114 <!-- this time after disconnection from gg server the transport 
     115      will try to connect again --> 
     116 <reconnect>300</reconnect> 
    114117 
    115118 <!-- Spool directory. This is the place, where user info will be stored. --> 
  • trunk/jggtrans.xml.Pl

    r102 r104  
    120120 <pong_timeout>31536000</pong_timeout> 
    121121 
     122 <!-- jak szybko ma transport spróbować się połączyć po rozłączeniu --> 
     123 <reconnect>300</reconnect> 
     124 
    122125 <!-- Katalog z danymi użytkowników. --> 
    123126 <!-- Proszę uważać na uprawnienie - hasła użytkowników (do GG) będą tam przechowywane --> 
  • trunk/src/sessions.c

    r96 r104  
    1 /* $Id: sessions.c,v 1.24 2002/02/06 17:23:37 jajcus Exp $ */ 
     1/* $Id: sessions.c,v 1.25 2002/02/22 16:20:33 jajcus Exp $ */ 
    22 
    33/* 
     
    3636static int pong_timeout=30; 
    3737static int ping_interval=10; 
     38static int reconnect=0; 
    3839GHashTable *sessions_jid; 
    3940 
     
    5556        i=config_load_int("ping_interval"); 
    5657        if (i>0) ping_interval=i; 
     58        i=config_load_int("reconnect"); 
     59        if (i>0) reconnect=i; 
    5760         
    5861        proxy_ip=config_load_string("proxy/ip"); 
     
    7881 
    7982int sessions_done(){ 
     83guint s; 
     84 
     85        s=g_hash_table_size(sessions_jid); 
     86        debug("%u sessions in hash table",s); 
    8087 
    8188        g_hash_table_foreach_remove(sessions_jid,sessions_hash_remove_func,NULL); 
    82         return 0; 
     89        g_hash_table_destroy(sessions_jid); 
     90        return 0; 
     91
     92 
     93gboolean sessions_reconnect(gpointer data){ 
     94char *jid; 
     95 
     96        jid=(char *)data; 
     97        presence_send_probe(jabber_stream(),jid); 
     98        g_free(jid); 
     99        return FALSE; 
     100
     101 
     102void session_schedule_reconnect(Session *s){ 
     103int t; 
     104         
     105        if (!reconnect) return; 
     106        t=(int)((reconnect*9.0/10.0)+(2.0*reconnect/10.0*rand()/(RAND_MAX+1.0))); 
     107        debug("Sheduling reconnect in reconnect %u seconds",t); 
     108        g_timeout_add(t*1000,sessions_reconnect,g_strdup(s->jid)); 
    83109} 
    84110 
     
    196222                s->connected=0; 
    197223                s->io_watch=0; 
     224                session_schedule_reconnect(s); 
    198225                session_remove(s); 
    199226                return FALSE; 
     
    212239                s->connected=0; 
    213240                s->io_watch=0; 
     241                session_schedule_reconnect(s); 
    214242                session_remove(s); 
    215243                return FALSE; 
     
    223251                        else presence_send(s->s,NULL,s->user->jid,0,NULL,"Login failed",0); 
    224252                        s->io_watch=0; 
     253                        if (!s->req_id) 
     254                                session_schedule_reconnect(s); 
    225255                        session_remove(s); 
    226256                        return FALSE;