-/*
- * Copyright (C) 2006 Andre Noll <maan@tuebingen.mpg.de>
- *
- * Licensed under the GPL v2. For licencing details see COPYING.
- */
+/* Copyright (C) 2006 Andre Noll <maan@tuebingen.mpg.de>, see file COPYING. */
/** \file dccp_send.c Paraslash's dccp sender. */
#include <arpa/inet.h>
#include <sys/un.h>
#include <netdb.h>
+#include <lopsub.h>
+#include "server.lsg.h"
#include "para.h"
#include "error.h"
#include "string.h"
#include "fd.h"
#include "close_on_fork.h"
#include "chunk_queue.h"
-#include "server.cmdline.h"
#include "acl.h"
static struct sender_status dccp_sender_status, *dss = &dccp_sender_status;
{
int mps, ret;
socklen_t ml = sizeof(mps);
+ uint32_t mss; /* max slize size */
/* If call fails, return some sensible minimum value */
ret = getsockopt(sc->fd, SOL_DCCP, DCCP_SOCKOPT_GET_CUR_MPS, &mps, &ml);
}
PARA_INFO_LOG("current MPS = %d bytes\n", mps);
assert(mps > 0);
- if (conf.dccp_max_slice_size_arg > 0)
- mps = PARA_MIN(mps, conf.dccp_max_slice_size_arg);
+ mss = OPT_UINT32_VAL(DCCP_MAX_SLICE_SIZE);
+ if (mss > 0 && mss <= INT_MAX)
+ mps = PARA_MIN(mps, (int)mss);
return mps;
}
struct sender_client *sc;
struct dccp_fec_client *dfc;
int tx_ccid;
+ uint32_t k, n;
sc = accept_sender_client(dss, rfds);
if (!sc)
/*
* Bypass unused CCID paths: the sender does not receive application data
* from the client; by shutting down this unused communication path we can
- * reduce processing costs a bit. See analogous comment in dccp_recv.c.
+ * reduce processing costs a bit. See analogous comment in \ref dccp_recv.c.
*/
if (shutdown(sc->fd, SHUT_RD) < 0) {
PARA_WARNING_LOG("%s\n", strerror(errno));
}
dfc = para_calloc(sizeof(*dfc));
sc->private_data = dfc;
- dfc->fcp.data_slices_per_group = conf.dccp_data_slices_per_group_arg;
- dfc->fcp.slices_per_group = conf.dccp_slices_per_group_arg;
+ k = OPT_UINT32_VAL(DCCP_DATA_SLICES_PER_GROUP);
+ n = OPT_UINT32_VAL(DCCP_SLICES_PER_GROUP);
+ if (k == 0 || n == 0 || k >= n) {
+ PARA_WARNING_LOG("invalid FEC parameters, using defaults\n");
+ dfc->fcp.data_slices_per_group = 3;
+ dfc->fcp.slices_per_group = 4;
+ } else {
+ dfc->fcp.data_slices_per_group = k;
+ dfc->fcp.slices_per_group = n;
+ }
dfc->fcp.init_fec = dccp_init_fec;
dfc->fcp.send_fec = dccp_send_fec;
dfc->fcp.need_periodic_header = false;
*/
void dccp_send_init(struct sender *s)
{
- int ret, k, n;
+ int ret;
s->status = dccp_status;
s->send = NULL;
s->shutdown_clients = dccp_shutdown_clients;
s->resolve_target = NULL;
s->help = generic_sender_help;
- s->client_cmds[SENDER_ON] = dccp_com_on;
- s->client_cmds[SENDER_OFF] = dccp_com_off;
- s->client_cmds[SENDER_DENY] = dccp_com_deny;
- s->client_cmds[SENDER_ALLOW] = dccp_com_allow;
- s->client_cmds[SENDER_ADD] = NULL;
- s->client_cmds[SENDER_DELETE] = NULL;
-
- k = conf.dccp_data_slices_per_group_arg;
- n = conf.dccp_slices_per_group_arg;
-
- if (k <= 0 || n <= 0 || k >= n) {
- PARA_WARNING_LOG("invalid FEC parameters, using defaults\n");
- conf.dccp_data_slices_per_group_arg = 3;
- conf.dccp_slices_per_group_arg = 4;
- }
-
- init_sender_status(dss, conf.dccp_access_arg, conf.dccp_access_given,
- conf.dccp_port_arg, conf.dccp_max_clients_arg,
- conf.dccp_default_deny_given);
+ s->client_cmds[SENDER_on] = dccp_com_on;
+ s->client_cmds[SENDER_off] = dccp_com_off;
+ s->client_cmds[SENDER_deny] = dccp_com_deny;
+ s->client_cmds[SENDER_allow] = dccp_com_allow;
+ s->client_cmds[SENDER_add] = NULL;
+ s->client_cmds[SENDER_delete] = NULL;
+
+ init_sender_status(dss, OPT_RESULT(DCCP_ACCESS),
+ OPT_UINT32_VAL(DCCP_PORT), OPT_UINT32_VAL(DCCP_MAX_CLIENTS),
+ OPT_GIVEN(DCCP_DEFAULT_DENY));
ret = generic_com_on(dss, IPPROTO_DCCP);
if (ret < 0)
PARA_ERROR_LOG("%s\n", para_strerror(-ret));