"Fossies" - the Fresh Open Source Software Archive 
Member "netbiff-0.9.18/connection.c" (21 Sep 2003, 1968 Bytes) of package /linux/privat/old/netbiff-0.9.18.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
1 #include "connection.h"
2 #include "xlib.h"
3 #include "gui.h"
4
5 #include <unistd.h>
6 #include <string.h>
7 #include <time.h>
8
9 Connection connections[MAX_CONNECTIONS];
10 unsigned nconnections = 0;
11
12 void connection_init(Connection *c) {
13 c->state = CSTATE_PENALTY_BOX;
14 c->pending_commands = 0;
15
16 c->retry_time = time(0);
17 c->penalty = 1;
18
19 c->fd_in = c->fd_out = -1;
20 buffer_init(&c->bin);
21 buffer_init(&c->bout);
22
23 c->name = NULL;
24 c->command = NULL;
25
26 c->nupdates = 0;
27 c->nresets = 0;
28 c->nfolders = 0;
29 c->folders_added = 0;
30 }
31
32 void connection_close(Connection *c) {
33 int i;
34
35 if(c->fd_in >= 0)
36 close(c->fd_in);
37 if(c->fd_out >= 0)
38 close(c->fd_out);
39
40 gui.delete_fd(c, GUI_FD_READ|GUI_FD_WRITE);
41
42 buffer_finish(&c->bin);
43 buffer_finish(&c->bout);
44
45 c->folders_added = 0;
46
47 c->retry_time = time(0) + 2 * c->penalty;
48 c->penalty *= 2;
49 c->state = CSTATE_PENALTY_BOX;
50 c->pending_commands = 0;
51
52 gui.schedule_retry(c->retry_time);
53
54 for(i = 0; i < c->nfolders; i++)
55 c->folders[i].biffed = 0;
56 gui.flagdown(c);
57 }
58
59 void connection_do_update(Connection *c, const char *folder) {
60 int i;
61
62 if(folder) {
63 xerror("%s: %s biffed", c->name, folder);
64 for(i = 0; i < c->nfolders; i++) {
65 if(!strcmp(folder, c->folders[i].name)) {
66 c->folders[i].biffed = 1;
67 break;
68 }
69 }
70 }
71
72 for(i = 0; i < c->nupdates; i++)
73 action_perform(c->updates[i], c);
74 }
75
76 void connection_do_reset(Connection *c, const char *folder) {
77 int i;
78 int biff_coefficient = 0;
79 int found = 0;
80 int was_biffed = 0;
81
82 if(folder) {
83 for(i = 0; i < c->nfolders; i++) {
84 if(!found && !strcmp(folder, c->folders[i].name)) {
85 was_biffed = c->folders[i].biffed;
86 c->folders[i].biffed = 0;
87 found = 1;
88 }
89 else
90 biff_coefficient += c->folders[i].biffed;
91 }
92 }
93
94 if(!biff_coefficient && found && was_biffed) {
95 for(i = 0; i < c->nresets; i++)
96 action_perform(c->resets[i], c);
97 }
98 }