-
Notifications
You must be signed in to change notification settings - Fork 4
/
resume.c
62 lines (55 loc) · 1.31 KB
/
resume.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/* Copyright (C) 2000 [email protected]
This is free software distributed under the terms of the
GNU Public License. See the file COPYING for details.
$Id$ */
#include <stdlib.h>
#include "opennap.h"
#include "debug.h"
/* packet contains: <checksum> <filesize> */
HANDLER (resume)
{
#if RESUME
char *av[2];
FLIST *flist;
LIST *ptr;
DATUM *d;
int fsize;
#endif /* RESUME */
(void) tag;
(void) len;
(void) pkt;
ASSERT (validate_connection (con));
CHECK_USER_CLASS ("resume");
#if RESUME
if (split_line (av, sizeof (av) / sizeof (char *), pkt) != 2)
{
unparsable (con);
return;
}
fsize = atoi (av[1]);
if(fsize < 1)
{
send_cmd(con,MSG_SERVER_NOSUCH,"invalid file size");
return;
}
/* search the database for a list of all files which match this hash */
flist = hash_lookup (MD5, av[0]);
if (flist)
{
for (ptr = flist->list; ptr; ptr = ptr->next)
{
d = (DATUM *) ptr->data;
if (d->size == (size_t)fsize)
{
ASSERT (validate_user (d->user));
send_cmd (con, MSG_SERVER_RESUME_MATCH,
"%s %u %d \"%s\" %s %d %hu",
d->user->nick, d->user->ip, d->user->port,
d->filename, d->hash, d->size,
d->user->speed);
}
}
}
#endif /* RESUME */
send_cmd (con, MSG_SERVER_RESUME_MATCH_END, "");
}