Dolda2000 GitWeb
/
doldaconnect.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Support minislots properly.
[doldaconnect.git]
/
daemon
/
fnet-dc.c
diff --git
a/daemon/fnet-dc.c
b/daemon/fnet-dc.c
index
df04b59
..
a7188b1
100644
(file)
--- a/
daemon/fnet-dc.c
+++ b/
daemon/fnet-dc.c
@@
-1778,15
+1778,10
@@
static void cmd_get(struct socket *sk, struct dcpeer *peer, char *cmd, char *arg
} else if(fd >= 0) {
if((buf2 = icsmbstowcs(args, DCCHARSET, NULL)) != NULL)
transfersetpath(peer->transfer, buf2);
} else if(fd >= 0) {
if((buf2 = icsmbstowcs(args, DCCHARSET, NULL)) != NULL)
transfersetpath(peer->transfer, buf2);
+ peer->transfer->flags.b.minislot = 1;
}
if(fd < 0)
{
}
if(fd < 0)
{
- if(slotsleft() < 1)
- {
- qstr(sk, "$MaxedOut|");
- freedcpeer(peer);
- return;
- }
if((node = resdcpath(args, DCCHARSET, '\\')) == NULL)
{
qstrf(sk, "$Error File not in share|");
if((node = resdcpath(args, DCCHARSET, '\\')) == NULL)
{
qstrf(sk, "$Error File not in share|");
@@
-1814,6
+1809,13
@@
static void cmd_get(struct socket *sk, struct dcpeer *peer, char *cmd, char *arg
freedcpeer(peer);
return;
}
freedcpeer(peer);
return;
}
+ if(sb.st_size < 65536)
+ peer->transfer->flags.b.minislot = 1;
+ if(!peer->transfer->flags.b.minislot && (slotsleft() < 1)) {
+ qstr(sk, "$MaxedOut|");
+ freedcpeer(peer);
+ return;
+ }
if((offset != 0) && (lseek(fd, offset, SEEK_SET) < 0))
{
close(fd);
if((offset != 0) && (lseek(fd, offset, SEEK_SET) < 0))
{
close(fd);
@@
-1917,14
+1919,10
@@
static void cmd_getblock(struct socket *sk, struct dcpeer *peer, char *cmd, char
} else if(fd >= 0) {
if((buf2 = icsmbstowcs(args, charset, NULL)) != NULL)
transfersetpath(peer->transfer, buf2);
} else if(fd >= 0) {
if((buf2 = icsmbstowcs(args, charset, NULL)) != NULL)
transfersetpath(peer->transfer, buf2);
+ peer->transfer->flags.b.minislot = 1;
}
if(fd < 0)
{
}
if(fd < 0)
{
- if(slotsleft() < 1)
- {
- qstr(sk, "$MaxedOut|");
- return;
- }
if((node = resdcpath(p, charset, '\\')) == NULL)
{
qstr(sk, "$Error File not in cache|");
if((node = resdcpath(p, charset, '\\')) == NULL)
{
qstr(sk, "$Error File not in cache|");
@@
-1949,6
+1947,12
@@
static void cmd_getblock(struct socket *sk, struct dcpeer *peer, char *cmd, char
qstr(sk, "$Error|");
return;
}
qstr(sk, "$Error|");
return;
}
+ if(sb.st_size < 65536)
+ peer->transfer->flags.b.minislot = 1;
+ if(!peer->transfer->flags.b.minislot && (slotsleft() < 1)) {
+ qstr(sk, "$MaxedOut|");
+ return;
+ }
if((start != 0) && ((start >= sb.st_size) || (lseek(fd, start, SEEK_SET) < 0)))
{
close(fd);
if((start != 0) && ((start >= sb.st_size) || (lseek(fd, start, SEEK_SET) < 0)))
{
close(fd);
@@
-2001,14
+2005,10
@@
static void cmd_adcget(struct socket *sk, struct dcpeer *peer, char *cmd, char *
} else if(fd >= 0) {
if((wbuf = icsmbstowcs(argv[1], "UTF-8", NULL)) != NULL)
transfersetpath(peer->transfer, wbuf);
} else if(fd >= 0) {
if((wbuf = icsmbstowcs(argv[1], "UTF-8", NULL)) != NULL)
transfersetpath(peer->transfer, wbuf);
+ peer->transfer->flags.b.minislot = 1;
}
if(fd < 0)
{
}
if(fd < 0)
{
- if(slotsleft() < 1)
- {
- qstr(sk, "$MaxedOut|");
- goto out;
- }
if(!strncmp(argv[1], "TTH/", 4))
{
if((node = findbytth(argv[1] + 4)) == NULL)
if(!strncmp(argv[1], "TTH/", 4))
{
if((node = findbytth(argv[1] + 4)) == NULL)
@@
-2048,6
+2048,12
@@
static void cmd_adcget(struct socket *sk, struct dcpeer *peer, char *cmd, char *
qstr(sk, "$Error|");
goto out;
}
qstr(sk, "$Error|");
goto out;
}
+ if(sb.st_size < 65536)
+ peer->transfer->flags.b.minislot = 1;
+ if(!peer->transfer->flags.b.minislot && (slotsleft() < 1)) {
+ qstr(sk, "$MaxedOut|");
+ goto out;
+ }
if((start != 0) && ((start >= sb.st_size) || (lseek(fd, start, SEEK_SET) < 0)))
{
qstr(sk, "$Error Offset out of range|");
if((start != 0) && ((start >= sb.st_size) || (lseek(fd, start, SEEK_SET) < 0)))
{
qstr(sk, "$Error Offset out of range|");