chiark
/
gitweb
/
~ian
/
inn-innduct.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
1e4b3db
)
wip make it compile
author
Ian Jackson
<ian@liberator.(none)>
Sat, 24 Apr 2010 23:46:23 +0000
(
00:46
+0100)
committer
Ian Jackson
<ian@liberator.(none)>
Sat, 24 Apr 2010 23:46:23 +0000
(
00:46
+0100)
backends/innduct.c
patch
|
blob
|
history
diff --git
a/backends/innduct.c
b/backends/innduct.c
index 17daacce274326d74cf76b0663a091649ec675e7..421623914d6c41ac79461c83dee34020064b9f6e 100644
(file)
--- a/
backends/innduct.c
+++ b/
backends/innduct.c
@@
-304,7
+304,7
@@
typedef enum { /* in queue in conn->sent */
#define RCI_TRIPLE_FMT_BASE "%d(id%d+bd%d+nc%d)"
#define RCI_TRIPLE_VALS_BASE(counts,x) \
#define RCI_TRIPLE_FMT_BASE "%d(id%d+bd%d+nc%d)"
#define RCI_TRIPLE_VALS_BASE(counts,x) \
-
, counts[art_Unchecked] x
\
+
counts[art_Unchecked] x
\
+ counts[art_Wanted] x \
+ counts[art_Unsolicited] x, \
counts[art_Unchecked] x \
+ counts[art_Wanted] x \
+ counts[art_Unsolicited] x, \
counts[art_Unchecked] x \
@@
-901,23
+901,23
@@
static void vconnfail(Conn *conn, const char *fmt, va_list al) {
char *m= xvasprintf(fmt,al);
warn("#%d connection failed, requeueing " RCI_TRIPLE_FMT_BASE ": %s",
char *m= xvasprintf(fmt,al);
warn("#%d connection failed, requeueing " RCI_TRIPLE_FMT_BASE ": %s",
- conn->fd, RCI_TRIPLE_
FMT_VALS
(requeue, /*nothing*/), m);
+ conn->fd, RCI_TRIPLE_
VALS_BASE
(requeue, /*nothing*/), m);
free(m);
close(conn->fd);
free(m);
close(conn->fd);
-
fixme remove conn from the appropriate list
;
+
LIST_REMOVE(conns,conn)
;
free(conn);
until_connect= reconnect_delay_periods;
check_master_queue();
}
free(conn);
until_connect= reconnect_delay_periods;
check_master_queue();
}
-static void connfail(Conn
ection
*conn, const char *fmt, ...)
+static void connfail(Conn *conn, const char *fmt, ...)
__attribute__((__format__(printf,2,3)));
__attribute__((__format__(printf,2,3)));
-static void connfail(Conn
ection
*conn, const char *fmt, ...) {
+static void connfail(Conn *conn, const char *fmt, ...) {
va_list al;
va_start(al,fmt);
va_list al;
va_start(al,fmt);
- vconnfail(fmt,al);
+ vconnfail(
conn,
fmt,al);
va_end(al);
}
va_end(al);
}
@@
-927,7
+927,7
@@
static XmitDetails *xmit_core(Conn *conn, const char *data, int len,
XmitKind kind) { /* caller must then fill in details */
struct iovec *v= &conn->xmit[conn->xmitu];
XmitDetails *d= &conn->xmitd[conn->xmitu++];
XmitKind kind) { /* caller must then fill in details */
struct iovec *v= &conn->xmit[conn->xmitu];
XmitDetails *d= &conn->xmitd[conn->xmitu++];
- v->iov_base= data;
+ v->iov_base=
(char*)
data;
v->iov_len= len;
d->kind= kind;
return d;
v->iov_len= len;
d->kind= kind;
return d;
@@
-939,7
+939,7
@@
static void xmit_noalloc(Conn *conn, const char *data, int len) {
#define XMIT_LITERAL(lit) (xmit_noalloc(conn, (lit), sizeof(lit)-1))
static void xmit_artbody(Conn *conn, ARTHANDLE *ah /* consumed */) {
#define XMIT_LITERAL(lit) (xmit_noalloc(conn, (lit), sizeof(lit)-1))
static void xmit_artbody(Conn *conn, ARTHANDLE *ah /* consumed */) {
- XmitDetails *d= xmit_core(conn, ah->data, ah->len,
s
k_Artdata);
+ XmitDetails *d= xmit_core(conn, ah->data, ah->len,
x
k_Artdata);
d->info.sm_art= ah;
}
d->info.sm_art= ah;
}
@@
-971,7
+971,8
@@
static void *conn_write_some_xmits(Conn *conn) {
}
assert(rs > 0);
}
assert(rs > 0);
- for (done=0; rs && done<xmitu; done++) {
+ int done;
+ for (done=0; rs && done<conn->xmitu; done++) {
struct iovec *vp= &conn->xmit[done];
XmitDetails *dp= &conn->xmitd[done];
if (rs > vp->iov_len) {
struct iovec *vp= &conn->xmit[done];
XmitDetails *dp= &conn->xmitd[done];
if (rs > vp->iov_len) {
@@
-1000,12
+1001,12
@@
static void conn_make_some_xmits(Conn *conn) {
if (art->state >= art_Wanted || (conn->stream && nocheck)) {
/* actually send it */
if (art->state >= art_Wanted || (conn->stream && nocheck)) {
/* actually send it */
- ARTHANDLE *artdata= SMretrieve();
+ ARTHANDLE *artdata= SMretrieve(
art->token, RETR_ALL
);
if (conn->stream) {
if (artdata) {
XMIT_LITERAL("TAKETHIS ");
if (conn->stream) {
if (artdata) {
XMIT_LITERAL("TAKETHIS ");
- xmit_noalloc(conn, art->mid, art->midlen);
+ xmit_noalloc(conn, art->m
essage
id, art->midlen);
XMIT_LITERAL("\r\n");
xmit_artbody(conn, artdata);
}
XMIT_LITERAL("\r\n");
xmit_artbody(conn, artdata);
}
@@
-1021,8
+1022,8
@@
static void conn_make_some_xmits(Conn *conn) {
art->state=
art->state == art_Unchecked ? art_Unsolicited :
art->state == art_Wanted ? art_Wanted :
art->state=
art->state == art_Unchecked ? art_Unsolicited :
art->state == art_Wanted ? art_Wanted :
-
abort(
);
- art->ipf->counts[art->state]
.sent
++;
+
(abort(),-1
);
+ art->ipf->counts[art->state]
[RCI_sent]
++;
LIST_ADDTAIL(conn->sent, art);
} else {
LIST_ADDTAIL(conn->sent, art);
} else {
@@
-1032,11
+1033,11
@@
static void conn_make_some_xmits(Conn *conn) {
XMIT_LITERAL("IHAVE ");
else
XMIT_LITERAL("CHECK ");
XMIT_LITERAL("IHAVE ");
else
XMIT_LITERAL("CHECK ");
- xmit_noalloc(
art->m
id, art->midlen);
+ xmit_noalloc(
conn, art->message
id, art->midlen);
XMIT_LITERAL("\r\n");
assert(art->state == art_Unchecked);
XMIT_LITERAL("\r\n");
assert(art->state == art_Unchecked);
- art->ipf->counts[art->state]
.sent
++;
+ art->ipf->counts[art->state]
[RCI_sent]
++;
LIST_ADDTAIL(conn->sent, art);
}
}
LIST_ADDTAIL(conn->sent, art);
}
}
@@
-1059,12
+1060,12
@@
static void *peer_rd_err(oop_source *lp, oop_read *oread, oop_event ev,
return OOP_CONTINUE;
}
return OOP_CONTINUE;
}
-static Article *article_reply_check(Conn
ection
*conn, const char *response,
+static Article *article_reply_check(Conn *conn, const char *response,
int code_indicates_streaming,
int must_have_sent
/* 1:yes, -1:no, 0:dontcare */,
const char *sanitised_response) {
int code_indicates_streaming,
int must_have_sent
/* 1:yes, -1:no, 0:dontcare */,
const char *sanitised_response) {
- Article *art=
conn->sent.head
;
+ Article *art=
LIST_HEAD(conn->sent)
;
if (!art) {
connfail(conn,
if (!art) {
connfail(conn,
@@
-1076,20
+1077,20
@@
static Article *article_reply_check(Connection *conn, const char *response,
if (code_indicates_streaming) {
assert(!memchr(response, 0, 4)); /* ensured by peer_rd_ok */
if (!conn->stream) {
if (code_indicates_streaming) {
assert(!memchr(response, 0, 4)); /* ensured by peer_rd_ok */
if (!conn->stream) {
- connfail("peer gave streaming response code "
+ connfail(
conn,
"peer gave streaming response code "
" to IHAVE or subsequent body: %s", sanitised_response);
return 0;
}
const char *got_mid= response+4;
int got_midlen= strcspn(got_mid, " \n\r");
if (got_midlen<3 || got_mid[0]!='<' || got_mid[got_midlen-1]!='>') {
" to IHAVE or subsequent body: %s", sanitised_response);
return 0;
}
const char *got_mid= response+4;
int got_midlen= strcspn(got_mid, " \n\r");
if (got_midlen<3 || got_mid[0]!='<' || got_mid[got_midlen-1]!='>') {
- connfail("peer gave streaming response with syntactically invalid"
+ connfail(
conn,
"peer gave streaming response with syntactically invalid"
" messageid: %s", sanitised_response);
return 0;
}
if (got_midlen != art->midlen ||
memcmp(got_mid, art->messageid, got_midlen)) {
" messageid: %s", sanitised_response);
return 0;
}
if (got_midlen != art->midlen ||
memcmp(got_mid, art->messageid, got_midlen)) {
- connfail("peer gave streaming response code to wrong article -"
+ connfail(
conn,
"peer gave streaming response code to wrong article -"
" probable synchronisation problem; we offered: %s;"
" peer said: %s",
art->messageid, sanitised_response);
" probable synchronisation problem; we offered: %s;"
" peer said: %s",
art->messageid, sanitised_response);
@@
-1097,19
+1098,19
@@
static Article *article_reply_check(Connection *conn, const char *response,
}
} else {
if (conn->stream) {
}
} else {
if (conn->stream) {
- connfail(
"peer gave non-streaming response code to CHECK/TAKETHIS: %s",
- sanitised_response);
+ connfail(
conn, "peer gave non-streaming response code to"
+
" CHECK/TAKETHIS: %s",
sanitised_response);
return 0;
}
}
if (must_have_sent>0 && art->state < art_Wanted) {
return 0;
}
}
if (must_have_sent>0 && art->state < art_Wanted) {
- connfail(
"peer says article accepted but we had not sent the body: %s",
- sanitised_response);
+ connfail(
conn, "peer says article accepted but"
+
" we had not sent the body: %s",
sanitised_response);
return 0;
}
if (must_have_sent<0 && art->state >= art_Wanted) {
return 0;
}
if (must_have_sent<0 && art->state >= art_Wanted) {
- connfail("peer says please sent the article but we just did: %s",
+ connfail(
conn,
"peer says please sent the article but we just did: %s",
sanitised_response);
return 0;
}
sanitised_response);
return 0;
}
@@
-1132,10
+1133,10
@@
static void update_nocheck(int accepted) {
nocheck= new_nocheck;
}
nocheck= new_nocheck;
}
-static void article_done(Conn
ection
*conn, Article *art, int whichcount) {
+static void article_done(Conn *conn, Article *art, int whichcount) {
art->ipf->counts[art->state][whichcount]++;
art->ipf->counts[art->state][whichcount]++;
- if (whichcount == RC_accepted) update_nocheck(1);
- else if (whichcount == RC_unwanted) update_nocheck(0);
+ if (whichcount == RC
I
_accepted) update_nocheck(1);
+ else if (whichcount == RC
I
_unwanted) update_nocheck(0);
InputFile *ipf= art->ipf;
while (art->blanklen) {
InputFile *ipf= art->ipf;
while (art->blanklen) {
@@
-1803,7
+1804,7
@@
static void notice_processed(InputFile *ipf, const char *what,
const char *spec) {
#define RCI_NOTHING(x) /* nothing */
#define RCI_TRIPLE_FMT(x) " " #x "=" RCI_TRIPLE_FMT_BASE
const char *spec) {
#define RCI_NOTHING(x) /* nothing */
#define RCI_TRIPLE_FMT(x) " " #x "=" RCI_TRIPLE_FMT_BASE
-#define RCI_TRIPLE_VALS(x) RCI_TRIPLE_VALS_BASE(ipf->counts, .x)
+#define RCI_TRIPLE_VALS(x)
,
RCI_TRIPLE_VALS_BASE(ipf->counts, .x)
info("processed %s%s offered=%d(ch%d,nc%d) accepted=%d(ch%d+nc%d)"
RESULT_COUNTS(RCI_NOTHING, RCI_TRIPLE_FMT)
info("processed %s%s offered=%d(ch%d,nc%d) accepted=%d(ch%d+nc%d)"
RESULT_COUNTS(RCI_NOTHING, RCI_TRIPLE_FMT)