Changeset 409
- Timestamp:
- 05/09/03 14:22:36 (6 years ago)
- Files:
-
- trunk/jggtrans.xml (modified) (1 diff)
- trunk/jggtrans.xml.Pl (modified) (1 diff)
- trunk/src/sessions.c (modified) (9 diffs)
- trunk/src/sessions.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/jggtrans.xml
r399 r409 121 121 <!-- How long to wait before restart, after jabber server connection is broken 122 122 negative value means, that jggtrans should terminate --> 123 <restart_timeout>60</restart_timeout> 123 <restart_timeout>60</restart_timeout> 124 125 <!-- Delay between the unavailable presence is received from user and loggin out 126 from GG - for nice <presence type="invisible"/> support --> 127 <disconnect_delay>5</disconnect_delay> 124 128 125 129 <!-- list of gg servers to use. trunk/jggtrans.xml.Pl
r399 r409 127 127 <reconnect>300</reconnect> 128 128 129 <!-- Opóźnienie pomiędzy otrzymaniem informacji o nieobecności użytkownika, 130 a wylogowaniem z GG. Służy to do poprawnej obsługi <presence type="invisible"/> --> 131 <disconnect_delay>5</disconnect_delay> 132 129 133 <!-- Katalog z danymi użytkowników. --> 130 134 <!-- Proszę uważać na uprawnienie - hasła użytkowników (do GG) będą tam przechowywane --> trunk/src/sessions.c
r406 r409 1 /* $Id: sessions.c,v 1.7 0 2003/05/09 10:32:01jajcus Exp $ */1 /* $Id: sessions.c,v 1.71 2003/05/09 12:22:36 jajcus Exp $ */ 2 2 3 3 /* … … 39 39 static int conn_timeout=30; 40 40 static int pong_timeout=30; 41 static int disconnect_delay=2; 41 42 static int ping_interval=10; 42 43 static int reconnect=0; … … 46 47 static int session_try_login(Session *s); 47 48 static int session_destroy(Session *s); 49 static void resource_remove(Resource *r,int kill_session); 48 50 49 51 static void session_stream_destroyed(gpointer key,gpointer value,gpointer user_data){ … … 77 79 i=config_load_int("pong_timeout",0); 78 80 if (i>0) pong_timeout=i; 81 i=config_load_int("disconnect_delay",0); 82 if (i>0) disconnect_delay=i; 79 83 i=config_load_int("ping_interval",0); 80 84 if (i>0) ping_interval=i; … … 518 522 static int session_destroy(Session *s){ 519 523 GList *it; 520 Resource *r=NULL;521 524 522 525 g_message(L_("Deleting session for '%s'"),s->jid); … … 545 548 gg_free_session(s->ggs); 546 549 } 550 while(s->resources) resource_remove((Resource *)s->resources->data,0); 547 551 if (s->query) xmlnode_free(s->query); 548 552 if (s->user) user_remove(s->user); 549 for(it=g_list_first(s->resources);it;){550 r=(Resource *)it->data;551 if (r->name) g_free(r->name);552 if (r->show) g_free(r->show);553 if (r->status) g_free(r->status);554 it=it->next;555 g_free(r);556 }557 g_list_free(s->resources);558 553 if (s->gg_status_descr) g_free(s->gg_status_descr); 559 s->resources=NULL;560 561 554 g_free(s); 562 555 return 0; … … 730 723 } 731 724 725 static void resource_remove(Resource *r,int kill_session){ 726 Session *s=r->session; 727 728 debug(L_("Removing resource %s of %s"),r->name,s->jid); 729 if (r->name) g_free(r->name); 730 if (r->show) g_free(r->show); 731 if (r->status) g_free(r->status); 732 s->resources=g_list_remove(s->resources,r); 733 g_free(r); 734 if (!s->resources && kill_session){ 735 session_remove(s); 736 return; 737 } 738 if (r->disconnect_delay_func){ 739 r->disconnect_delay_func=0; 740 g_source_remove(r->disconnect_delay_func); 741 } 742 } 743 744 gboolean delayed_disconnect(gpointer data){ 745 Resource *r=(Resource *)data; 746 747 g_assert(r!=NULL); 748 749 debug(L_("Delayed removal of resource %s of %s"),r->name,r->session->jid); 750 r->disconnect_delay_func=0; 751 resource_remove(r,1); 752 return FALSE; 753 } 754 755 732 756 int session_set_status(Session *s,const char *resource,int available, 733 757 const char *show,const char *status,int priority){ … … 745 769 746 770 if (!available){ 747 if (r){ 748 debug(L_("Removing resource %s of %s"),resource?resource:"NULL",s->jid); 749 if (r->name) g_free(r->name); 750 if (r->show) g_free(r->show); 751 if (r->status) g_free(r->status); 752 s->resources=g_list_remove(s->resources,r); 753 g_free(r); 754 if (!s->resources){ 755 session_remove(s); 756 return -1; 757 } 758 } 759 else{ 771 if (!r){ 760 772 g_warning(N_("Unknown resource %s of %s"),resource?resource:"NULL",s->jid); 761 773 return 0; 762 774 } 775 if (disconnect_delay>0 && r->available){ 776 r->available=0; 777 debug(L_("Delaying removal of resource %s of %s"),resource?resource:"NULL",s->jid); 778 r->disconnect_delay_func=g_timeout_add(disconnect_delay*1000,delayed_disconnect,r); 779 } 780 else resource_remove(r,1); 781 return 0; 763 782 } 764 783 else{ 765 766 784 if ( r ){ 785 if (r->disconnect_delay_func) g_source_remove(r->disconnect_delay_func); 767 786 if (r->show){ 768 787 g_free(r->show); … … 778 797 r=g_new0(Resource,1); 779 798 if (resource) r->name=g_strdup(resource); 799 r->session=s; 780 800 s->resources=g_list_append(s->resources,r); 781 801 } trunk/src/sessions.h
r406 r409 1 /* $Id: sessions.h,v 1.2 3 2003/05/09 10:32:01jajcus Exp $ */1 /* $Id: sessions.h,v 1.24 2003/05/09 12:22:36 jajcus Exp $ */ 2 2 3 3 /* … … 29 29 char *show; 30 30 char *status; 31 struct session_s *session; 32 guint disconnect_delay_func; 31 33 }Resource; 32 34
