size_t cwsize, cwdata;
};
-static int uiread(struct socket *sk, struct uidata *data);
-static int uierror(struct socket *sk, int err, struct uidata *data);
static int srcheta(struct search *srch, void *uudata);
static int srchcommit(struct search *srch, void *uudata);
static int srchres(struct search *srch, struct srchres *sr, void *uudata);
} else {
for(peer = fn->peers; peer != NULL; peer = peer->next)
{
- sq(sk, 2 | ((peer->next != NULL)?1:0), L"200", L"%%s", peer->id, L"%%s", peer->nick, NULL);
+ sq(sk, 2 | ((peer->next != NULL)?1:0), L"200", L"%%ls", peer->id, L"%%ls", peer->nick, NULL);
for(i = 0; i < peer->dinum; i++)
{
if(peer->peerdi[i].datum->datatype == FNPD_INT)
sq(sk, 2, peer->peerdi[i].datum->id, buf, NULL);
}
if((peer->peerdi[i].datum->datatype == FNPD_STR) && (peer->peerdi[i].data.str != NULL))
- sq(sk, 2, peer->peerdi[i].datum->id, L"%%s", peer->peerdi[i].data.str, NULL);
+ sq(sk, 2, peer->peerdi[i].datum->id, L"%%ls", peer->peerdi[i].data.str, NULL);
}
sq(sk, 0, NULL);
}
sq(sk, 0, L"200", L"Search cancelled", NULL);
}
-static int fcmdread(struct socket *sk, struct uidata *data)
+static void fcmdread(struct socket *sk, struct uidata *data)
{
char *buf;
size_t bufsize;
if((buf = sockgetinbuf(sk, &bufsize)) == NULL)
- return(0);
+ return;
bufcat(data->fcmdbuf, buf, bufsize);
free(buf);
- return(0);
}
-static int fcmderr(struct socket *sk, int err, struct uidata *data)
+static void fcmderr(struct socket *sk, int err, struct uidata *data)
{
wchar_t *wbuf, *p, *p2;
}
data->fcmdbufsize = data->fcmdbufdata = 0;
sq(data->sk, 0, L"505", L"An error occurred on the pipe to the filtercmd", L"%%s", strerror(err), NULL);
- return(0);
+ return;
}
putsock(data->fcmdsk);
data->fcmdsk = NULL;
if(wbuf == NULL)
{
sq(data->sk, 0, L"504", L"Filtercmd sent data which could not be converted from the local charset", NULL);
- return(0);
+ return;
}
p = wbuf;
for(p2 = wcschr(p, L'\n'); p2 != NULL; p2 = wcschr(p, L'\n'))
sq(data->sk, 0, L"200", L"%%ls", p, NULL);
}
free(wbuf);
- return(0);
}
static void cmd_filtercmd(struct socket *sk, struct uidata *data, int argc, wchar_t **argv)
data->fcmdbuf = NULL;
}
data->fcmdbufsize = data->fcmdbufdata = 0;
- CBREG(data->fcmdsk, socket_read, (int (*)(struct socket *, void *))fcmdread, NULL, data);
- CBREG(data->fcmdsk, socket_err, (int (*)(struct socket *, int, void *))fcmderr, NULL, data);
+ data->fcmdsk->data = data;
+ data->fcmdsk->readcb = (void (*)(struct socket *, void *))fcmdread;
+ data->fcmdsk->errcb = (void (*)(struct socket *, int, void *))fcmderr;
}
static void cmd_lstrarg(struct socket *sk, struct uidata *data, int argc, wchar_t **argv)
havepriv(PERM_TRANS);
buf1 = swprintf2(L"%lli", bytesdownload);
buf2 = swprintf2(L"%lli", bytesupload);
- sq(sk, 0, L"200", L"%%ls", buf1, L"%%ls", buf2, NULL);
+ sq(sk, 0, L"200", L"down", L"%%ls", buf1, L"up", L"%%ls", buf2, NULL);
free(buf1);
free(buf2);
}
data->prev->next = data->next;
if(data == actives)
actives = data->next;
- CBUNREG(data->sk, socket_read, uiread, data);
- CBUNREG(data->sk, socket_err, uierror, data);
+ data->sk->readcb = NULL;
+ data->sk->errcb = NULL;
putsock(data->sk);
while((qcmd = unlinkqcmd(data)) != NULL)
freequeuecmd(qcmd);
return(data);
}
-static int uiread(struct socket *sk, struct uidata *data)
+static void uiread(struct socket *sk, struct uidata *data)
{
int ret, done;
char *newbuf;
if(data->indata > 1024)
data->indata = 0;
if((newbuf = sockgetinbuf(sk, &datalen)) == NULL)
- return(0);
+ return;
sizebuf(&data->inbuf, &data->inbufsize, data->indata + datalen, 1, 1);
memcpy(data->inbuf + data->indata, newbuf, datalen);
free(newbuf);
break;
}
}
- return(0);
}
-static int uierror(struct socket *sk, int err, struct uidata *data)
+static void uierror(struct socket *sk, int err, struct uidata *data)
{
if(err)
flog(LOG_WARNING, "error occurred on UI socket: %s", strerror(err));
freeuidata(data);
- return(0);
}
-static int uiaccept(struct socket *sk, struct socket *newsk, void *data)
+static void uiaccept(struct socket *sk, struct socket *newsk, void *data)
{
struct uidata *uidata;
- uidata = newuidata(newsk);
+ newsk->data = uidata = newuidata(newsk);
socksettos(newsk, confgetint("ui", "uitos"));
if(uidata == NULL)
- return(0);
- CBREG(newsk, socket_err, (int (*)(struct socket *, int, void *))uierror, NULL, uidata);
- CBREG(newsk, socket_read, (int (*)(struct socket *, void *))uiread, NULL, uidata);
+ return;
+ newsk->errcb = (void (*)(struct socket *, int, void *))uierror;
+ newsk->readcb = (void (*)(struct socket *, void *))uiread;
queuecmd(uidata, &commands[0], 0, NULL);
- return(0);
}
static int srcheta(struct search *srch, void *uudata)
static struct configvar myvars[] =
{
+ /** If true, UI connections will only be accepted from localhost
+ * addresses (127.0.0.1, ::1 or ::ffff:127.0.0.1). Unless you are
+ * completely sure that you know what you are doing, never turn
+ * this off when auth.authless is on. */
{CONF_VAR_BOOL, "onlylocal", {.num = 1}},
+ /** The port number on which to accept UI client connections. */
{CONF_VAR_INT, "port", {.num = 1500}},
+ /** The TOS value to use for UI connections (see the TOS VALUES
+ * section). */
{CONF_VAR_INT, "uitos", {.num = SOCK_TOS_MINDELAY}},
+ /** The name of the filtercmd script (see the FILES section for
+ * lookup information). */
{CONF_VAR_STRING, "filtercmd", {.str = L"dc-filtercmd"}},
{CONF_VAR_END}
};