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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
--- afpfs-ng-0.8.1/lib/afp.c 2008-03-08 03:44:16.000000000 +0100
+++ afpfs-ng-0.8.1/lib/afp.c 2011-08-26 21:33:33.000000000 +0200
@@ -68,7 +68,7 @@
afp_getsessiontoken_reply,afp_blank_reply, NULL, NULL,
afp_enumerateext2_reply, NULL, NULL, NULL, /*64 - 71 */
afp_listextattrs_reply, NULL, NULL, NULL,
- afp_blank_reply, NULL, NULL, NULL, /*72 - 79 */
+ afp_blank_reply, NULL, afp_blank_reply, afp_blank_reply, /*72 - 79 */
NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
@@ -320,8 +320,16 @@
struct dsi_request * p;
struct afp_server *s2;
+
+
+ if (s==NULL)
+ goto out;
+
for (p=s->command_requests;p;p=p->next) {
- pthread_cond_signal(&p->condition_cond);
+ pthread_mutex_lock(&p->waiting_mutex);
+ p->done_waiting=1;
+ pthread_cond_signal(&p->waiting_cond);
+ pthread_mutex_unlock(&p->waiting_mutex);
}
if (s==server_base) {
@@ -354,7 +362,7 @@
s->exit_flag = 0;
s->path_encoding=kFPUTF8Name; /* This is a default */
s->next=NULL;
- s->bufsize=2048;
+ s->bufsize=4096;
s->incoming_buffer=malloc(s->bufsize);
s->attention_quantum=AFP_DEFAULT_ATTENTION_QUANTUM;
@@ -524,13 +532,14 @@
kFPVolCreateDateBit|kFPVolIDBit |
kFPVolNameBit;
char new_encoding;
+ int ret;
if (server->using_version->av_number>=30)
bitmap|= kFPVolNameBit|kFPVolBlockSizeBit;
- switch (afp_volopen(volume,bitmap,
- (strlen(volume->volpassword)>0) ? volume->volpassword : NULL))
- {
+ ret = afp_volopen(volume,bitmap,
+ (strlen(volume->volpassword)>0) ? volume->volpassword : NULL);
+ switch(ret){
case kFPAccessDenied:
*l+=snprintf(mesg,max-*l,
"Incorrect volume password\n");
@@ -544,6 +553,10 @@
*l+=snprintf(mesg,max-*l,
"Could not open volume\n");
goto error;
+ case ETIMEDOUT:
+ *l+=snprintf(mesg,max-*l,
+ "Timed out waiting to open volume\n");
+ goto error;
}
/* It is said that if a volume's encoding will be the same
@@ -641,7 +654,6 @@
add_server(server);
add_fd_and_signal(server->fd);
-
if (!full) {
return 0;
}
@@ -649,10 +661,13 @@
/* Get the status, and calculate the transmit time. We use this to
* calculate our rx quantum. */
gettimeofday(&t1,NULL);
+
if ((error=dsi_getstatus(server))!=0)
goto error;
gettimeofday(&t2,NULL);
+ afp_server_identify(server);
+
if ((t2.tv_sec - t1.tv_sec) > 0)
server->tx_delay= (t2.tv_sec - t1.tv_sec) * 1000;
else
|