From: Gerrit Renker Date: Sun, 23 May 2010 05:43:04 +0000 (+0200) Subject: dccp: integrate new fec interaction X-Git-Tag: v0.4.3~13^2~12 X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=commitdiff_plain;h=e1a07bd50c0e0bc393abf89a342ce53e10ccf576;hp=96dd1284a1b7d565560979fdc7ec647aeceb6b52 dccp: integrate new fec interaction This updates the DCCP sender code to access and initialize the new fec_client structs. Particulars: * the open() method has been removed, to be supplied in a later patch; * the sender_client field became redundant, it is now available as fc->sc. --- diff --git a/dccp_send.c b/dccp_send.c index b13f719e..0657d11c 100644 --- a/dccp_send.c +++ b/dccp_send.c @@ -36,13 +36,10 @@ #define DCCP_MAX_BYTES_PER_WRITE 1024 static struct sender_status dccp_sender_status, *dss = &dccp_sender_status; -static struct sender *self; - struct dccp_fec_client { struct fec_client_parms fcp; struct fec_client *fc; - struct sender_client *sc; }; static void dccp_pre_select(int *max_fileno, fd_set *rfds, @@ -89,24 +86,12 @@ static void dccp_shutdown_clients(void) dccp_shutdown_client(sc); } -static int dccp_open(void *client, struct fec_client_parms **fcp) -{ - struct dccp_fec_client *dfc = client; - - dfc->fcp.slices_per_group = 4; - dfc->fcp.data_slices_per_group = 3; - dfc->fcp.max_slice_bytes = 1472; - *fcp = &dfc->fcp; - return 1; -} - -static int dccp_send_fec(char *buf, size_t len, void *private_data) +static int dccp_send_fec(struct sender_client *sc, char *buf, size_t len) { - struct dccp_fec_client *dfc = private_data; - int ret = write_nonblock(dfc->sc->fd, buf, len, DCCP_MAX_BYTES_PER_WRITE); + int ret = write_nonblock(sc->fd, buf, len, DCCP_MAX_BYTES_PER_WRITE); if (ret < 0) - dccp_shutdown_client(dfc->sc); + dccp_shutdown_client(sc); return ret; } @@ -140,8 +125,12 @@ static void dccp_post_select(fd_set *rfds, __a_unused fd_set *wfds) } dfc = para_calloc(sizeof(*dfc)); sc->private_data = dfc; - dfc->sc = sc; - /* XXX RESOLVED LATER vss_add_fec_client(self, dfc, &dfc->fc); */ + dfc->fcp.slices_per_group = 4; + dfc->fcp.data_slices_per_group = 3; + dfc->fcp.max_slice_bytes = DCCP_MAX_BYTES_PER_WRITE; /* FIXME */ + dfc->fcp.init_fec = NULL; /* FIXME */ + dfc->fcp.send_fec = dccp_send_fec; + dfc->fc = vss_add_fec_client(sc, &dfc->fcp); } static int dccp_com_on(__a_unused struct sender_command_data *scd) @@ -212,8 +201,6 @@ void dccp_send_init(struct sender *s) s->info = dccp_info; s->send = NULL; - s->open = dccp_open; - s->send_fec = dccp_send_fec; s->pre_select = dccp_pre_select; s->post_select = dccp_post_select; s->shutdown_clients = dccp_shutdown_clients; @@ -231,5 +218,4 @@ void dccp_send_init(struct sender *s) ret = generic_com_on(dss, IPPROTO_DCCP); if (ret < 0) PARA_ERROR_LOG("%s\n", para_strerror(-ret)); - self = s; }