@@ -38,10 +38,12 @@
38 38 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nDeltaSent; /* Number of deltas sent */
39 39 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nFileRcvd; /* Number of files received */
40 40 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nDeltaRcvd; /* Number of deltas received */
41 41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nDanglingFile; /* Number of dangling deltas received */
42 42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int mxSend; /* Stop sending "file" with pOut reaches this size */
43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 sendPrivate; /* True to enable sending private content */
44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 nextIsPrivate; /* If true, next "file" received is a private */
43 45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
44 46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
45 47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
46 48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
47 49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The input blob contains a UUID. Convert it into a record ID.
@@ -49,11 +51,11 @@
49 51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** phantomize is true.
50 52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
51 53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Compare to uuid_to_rid(). This routine takes a blob argument
52 54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and does less error checking.
53 55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int rid_from_uuid(Blob *pUuid, int phantomize){
56 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int rid_from_uuid(Blob *pUuid, int phantomize, int isPrivate){
55 57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static Stmt q;
56 58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rid;
57 59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
58 60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_static_prepare(&q, "SELECT rid FROM blob WHERE uuid=:uuid");
59 61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_bind_str(&q, ":uuid", pUuid);
@@ -62,11 +64,11 @@
62 64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
63 65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rid = 0;
64 66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
65 67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_reset(&q);
66 68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rid==0 && phantomize ){
67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rid = content_new(blob_str(pUuid), 0);
69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rid = content_new(blob_str(pUuid), isPrivate);
68 70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
69 71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rid;
70 72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
71 73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
72 74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -106,11 +108,14 @@
106 108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void xfer_accept_file(Xfer *pXfer, int cloneFlag){
107 109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n;
108 110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rid;
109 111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int srcid = 0;
110 112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob content, hash;
113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isPriv;
111 114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ isPriv = pXfer->nextIsPrivate;
116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pXfer->nextIsPrivate = 0;
112 117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pXfer->nToken<3
113 118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| pXfer->nToken>4
114 119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| !blob_is_uuid(&pXfer->aToken[1])
115 120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| !blob_is_int(&pXfer->aToken[pXfer->nToken-1], &n)
116 121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| n<0
@@ -123,29 +128,35 @@
123 128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_zero(&hash);
124 129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_extract(pXfer->pIn, n, &content);
125 130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !cloneFlag && uuid_is_shunned(blob_str(&pXfer->aToken[1])) ){
126 131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Ignore files that have been shunned */
127 132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isPriv && !g.okPrivate ){
135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Do not accept private files if not authorized */
136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
128 137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
129 138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( cloneFlag ){
130 139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pXfer->nToken==4 ){
131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- srcid = rid_from_uuid(&pXfer->aToken[2], 1);
140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ srcid = rid_from_uuid(&pXfer->aToken[2], 1, isPriv);
132 141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pXfer->nDeltaRcvd++;
133 142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
134 143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
srcid = 0;
135 144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pXfer->nFileRcvd++;
136 145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rid = content_put_ex(&content, blob_str(&pXfer->aToken[1]), srcid, 0, 0);
146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rid = content_put_ex(&content, blob_str(&pXfer->aToken[1]), srcid,
147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, isPriv);
138 148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
remote_has(rid);
139 149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&content);
140 150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
141 151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
142 152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pXfer->nToken==4 ){
143 153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob src, next;
144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- srcid = rid_from_uuid(&pXfer->aToken[2], 1);
154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ srcid = rid_from_uuid(&pXfer->aToken[2], 1, isPriv);
145 155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( content_get(srcid, &src)==0 ){
146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rid = content_put_ex(&content, blob_str(&pXfer->aToken[1]), srcid, 0, 0);
156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rid = content_put_ex(&content, blob_str(&pXfer->aToken[1]), srcid,
157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, isPriv);
147 158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pXfer->nDanglingFile++;
148 159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec("DELETE FROM phantom WHERE rid=%d", rid);
149 160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
content_make_public(rid);
150 161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
151 162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -159,17 +170,17 @@
159 170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
160 171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sha1sum_blob(&content, &hash);
161 172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !blob_eq_str(&pXfer->aToken[1], blob_str(&hash), -1) ){
162 173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&pXfer->err, "content does not match sha1 hash");
163 174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rid = content_put_ex(&content, blob_str(&hash), 0, 0, 0);
175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rid = content_put_ex(&content, blob_str(&hash), 0, 0, isPriv);
165 176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&hash);
166 177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rid==0 ){
167 178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&pXfer->err, "%s", g.zErrMsg);
168 179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&content);
169 180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- content_make_public(rid);
181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !isPriv ) content_make_public(rid);
171 182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
manifest_crosslink(rid, &content);
172 183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
173 184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( blob_is_reset(&content) );
174 185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
remote_has(rid);
175 186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -201,11 +212,14 @@
201 212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int szC; /* CSIZE */
202 213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int szU; /* USIZE */
203 214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rid;
204 215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int srcid = 0;
205 216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob content;
217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isPriv;
206 218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ isPriv = pXfer->nextIsPrivate;
220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pXfer->nextIsPrivate = 0;
207 221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pXfer->nToken<4
208 222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| pXfer->nToken>5
209 223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| !blob_is_uuid(&pXfer->aToken[1])
210 224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| !blob_is_int(&pXfer->aToken[pXfer->nToken-2], &szU)
211 225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| !blob_is_int(&pXfer->aToken[pXfer->nToken-1], &szC)
@@ -212,25 +226,30 @@
212 226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| szC<0 || szU<0
213 227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| (pXfer->nToken==5 && !blob_is_uuid(&pXfer->aToken[2]))
214 228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
215 229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&pXfer->err, "malformed cfile line");
216 230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isPriv && !g.okPrivate ){
233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Do not accept private files if not authorized */
234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
217 235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
218 236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_zero(&content);
219 237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_extract(pXfer->pIn, szC, &content);
220 238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( uuid_is_shunned(blob_str(&pXfer->aToken[1])) ){
221 239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Ignore files that have been shunned */
222 240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
223 241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
224 242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pXfer->nToken==5 ){
225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- srcid = rid_from_uuid(&pXfer->aToken[2], 1);
243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ srcid = rid_from_uuid(&pXfer->aToken[2], 1, isPriv);
226 244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pXfer->nDeltaRcvd++;
227 245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
228 246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
srcid = 0;
229 247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pXfer->nFileRcvd++;
230 248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rid = content_put_ex(&content, blob_str(&pXfer->aToken[1]), srcid, szC, 0);
249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rid = content_put_ex(&content, blob_str(&pXfer->aToken[1]), srcid,
250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ szC, isPriv);
232 251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
remote_has(rid);
233 252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&content);
234 253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
235 254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
236 255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -445,19 +464,20 @@
445 464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
446 465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
447 466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
448 467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Send a gimme message for every phantom.
449 468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** It should not be possible to have a private phantom. But just to be
451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sure, take care not to send any "gimme" messagse on private artifacts.
469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Except: do not request shunned artifacts. And do not request
470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** private artifacts if we are not doing a private transfer.
452 471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
453 472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void request_phantoms(Xfer *pXfer, int maxReq){
454 473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Stmt q;
455 474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_prepare(&q,
456 475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"SELECT uuid FROM phantom JOIN blob USING(rid)"
457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " WHERE NOT EXISTS(SELECT 1 FROM shun WHERE uuid=blob.uuid)"
458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " AND NOT EXISTS(SELECT 1 FROM private WHERE rid=blob.rid)"
476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " WHERE NOT EXISTS(SELECT 1 FROM shun WHERE uuid=blob.uuid) %s",
477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (pXfer->sendPrivate ? "" :
478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " AND NOT EXISTS(SELECT 1 FROM private WHERE rid=blob.rid)")
459 479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
460 480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( db_step(&q)==SQLITE_ROW && maxReq-- > 0 ){
461 481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zUuid = db_column_text(&q, 0);
462 482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(pXfer->pOut, "gimme %s\n", zUuid);
463 483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pXfer->nGimmeSent++;
@@ -641,10 +661,27 @@
641 661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
content_put(&cluster);
642 662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&cluster);
643 663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
644 664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
645 665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Send igot messages for every private artifact
669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int send_private(Xfer *pXfer){
671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int cnt = 0;
672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Stmt q;
673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pXfer->sendPrivate ){
674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_prepare(&q, "SELECT uuid FROM private JOIN blob USING(rid)");
675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( db_step(&q)==SQLITE_ROW ){
676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_appendf(pXfer->pOut, "igot %s 1\n", db_column_text(&q,0));
677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cnt++;
678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_finalize(&q);
680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return cnt;
682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
646 683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
647 684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
648 685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Send an igot message for every entry in unclustered table.
649 686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return the number of cards sent.
650 687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -652,12 +689,12 @@
652 689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Stmt q;
653 690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int cnt = 0;
654 691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_prepare(&q,
655 692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"SELECT uuid FROM unclustered JOIN blob USING(rid)"
656 693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE NOT EXISTS(SELECT 1 FROM shun WHERE uuid=blob.uuid)"
657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " AND NOT EXISTS(SELECT 1 FROM private WHERE rid=blob.rid)"
658 694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" AND NOT EXISTS(SELECT 1 FROM phantom WHERE rid=blob.rid)"
695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " AND NOT EXISTS(SELECT 1 FROM private WHERE rid=blob.rid)"
659 696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
660 697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( db_step(&q)==SQLITE_ROW ){
661 698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(pXfer->pOut, "igot %s\n", db_column_text(&q, 0));
662 699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cnt++;
663 700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -811,27 +848,32 @@
811 848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& xfer.nToken==2
812 849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& blob_is_uuid(&xfer.aToken[1])
813 850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
814 851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nGimme++;
815 852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isPull ){
816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rid = rid_from_uuid(&xfer.aToken[1], 0);
853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rid = rid_from_uuid(&xfer.aToken[1], 0, 0);
817 854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rid ){
818 855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
send_file(&xfer, rid, &xfer.aToken[1], deltaFlag);
819 856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
820 857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
821 858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else
822 859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* igot UUID
860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* igot UUID ?ISPRIVATE?
824 861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Client announces that it has a particular file.
862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Client announces that it has a particular file. If the ISPRIVATE
863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** argument exists and is non-zero, then the file is a private file.
826 864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( xfer.nToken==2
865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( xfer.nToken>=2
828 866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& blob_eq(&xfer.aToken[0], "igot")
829 867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& blob_is_uuid(&xfer.aToken[1])
830 868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
831 869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isPush ){
832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rid_from_uuid(&xfer.aToken[1], 1);
870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( xfer.nToken==2 || blob_eq(&xfer.aToken[1],"1")==0 ){
871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rid_from_uuid(&xfer.aToken[1], 1, 0);
872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( g.okPrivate ){
873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rid_from_uuid(&xfer.aToken[1], 1, 1);
874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
833 875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
834 876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else
835 877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
836 878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
837 879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* pull SERVERCODE PROJECTCODE
@@ -929,11 +971,11 @@
929 971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
930 972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( blob_eq(&xfer.aToken[0], "login")
931 973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& xfer.nToken==4
932 974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
933 975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( disableLogin ){
934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- g.okRead = g.okWrite = 1;
976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ g.okRead = g.okWrite = g.okPrivate = 1;
935 977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
936 978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( check_tail_hash(&xfer.aToken[2], xfer.pIn)
937 979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| check_login(&xfer.aToken[1], &xfer.aToken[2], &xfer.aToken[3])
938 980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
939 981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cgi_reset_content();
@@ -1029,10 +1071,39 @@
1029 1071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1030 1072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( blob_eq(&xfer.aToken[0], "cookie") && xfer.nToken==2 ){
1031 1073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Process the cookie */
1032 1074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else
1033 1075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* private
1078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
1079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This card indicates that the next "file" or "cfile" will contain
1080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** private content.
1081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
1082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( blob_eq(&xfer.aToken[0], "private") ){
1083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ xfer.nextIsPrivate = 1;
1084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else
1085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* pragma NAME VALUE...
1088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
1089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The client issue pragmas to try to influence the behavior of the
1090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** server. These are requests only. Unknown pragmas are silently
1091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ignored.
1092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
1093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( blob_eq(&xfer.aToken[0], "set") && xfer.nToken>=2 ){
1094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* pragma send-private
1095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
1096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the user has the "x" privilege (which must be set explicitly -
1097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** it is not automatic with "a" or "s") then this pragma causes
1098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** private information to be pulled in addition to public records.
1099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
1100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( blob_eq(&xfer.aToken[1], "send-private") ){
1101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( g.okPrivate ) xfer.sendPrivate = 1;
1102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else
1104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1034 1105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Unknown message
1035 1106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1036 1107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{
1037 1108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cgi_reset_content();
1038 1109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ error bad\scommand:\s%F(blob_str(&xfer.line))
@@ -1049,13 +1120,15 @@
1049 1120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** cause the client to create phantoms for all artifacts, which will
1050 1121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in turn make sure that the entire repository is sent efficiently
1051 1122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and expeditiously.
1052 1123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1053 1124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
send_all(&xfer);
1125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( xfer.sendPrivate ) send_private(&xfer);
1054 1126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( isPull ){
1055 1127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
create_cluster();
1056 1128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
send_unclustered(&xfer);
1129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( xfer.sendPrivate ) send_private(&xfer);
1057 1130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1058 1131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( recvConfig ){
1059 1132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
configure_finalize_receive();
1060 1133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1061 1134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
manifest_crosslink_end();
@@ -1120,10 +1193,11 @@
1120 1193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1121 1194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int client_sync(
1122 1195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int pushFlag, /* True to do a push (or a sync) */
1123 1196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int pullFlag, /* True to do a pull (or a sync) */
1124 1197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int cloneFlag, /* True if this is a clone */
1198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int privateFlag, /* True to exchange private branches */
1125 1199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int configRcvMask, /* Receive these configuration items */
1126 1200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int configSendMask /* Send these configuration items */
1127 1201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
1128 1202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int go = 1; /* Loop until zero */
1129 1203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nCardSent = 0; /* Number of cards sent */
@@ -1155,10 +1229,14 @@
1155 1229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
socket_global_init();
1156 1230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&xfer, 0, sizeof(xfer));
1157 1231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
xfer.pIn = &recv;
1158 1232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
xfer.pOut = &send;
1159 1233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
xfer.mxSend = db_get_int("max-upload", 250000);
1234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( privateFlag ){
1235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ g.okPrivate = 1;
1236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ xfer.sendPrivate = 1;
1237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1160 1238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1161 1239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pushFlag | pullFlag | cloneFlag | configRcvMask | configSendMask );
1162 1240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_begin_transaction();
1163 1241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_record_repository_filename(0);
1164 1242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
@@ -1202,10 +1280,17 @@
1202 1280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1203 1281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zCookie = db_get("cookie", 0);
1204 1282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zCookie ){
1205 1283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&send, "cookie %s\n", zCookie);
1206 1284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Send a pragma to alert the server that we want private content if
1287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** doing a private push, pull, sync, or clone.
1288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
1289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( privateFlag ){
1290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(&send, "pragma send-private\n", -1);
1291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1207 1292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1208 1293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Generate gimme cards for phantoms and leaf cards
1209 1294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** for all leaves.
1210 1295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1211 1296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pullFlag || (cloneFlag && cloneSeqno==1) ){
@@ -1349,32 +1434,40 @@
1349 1434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( blob_eq(&xfer.aToken[0], "gimme")
1350 1435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& xfer.nToken==2
1351 1436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& blob_is_uuid(&xfer.aToken[1])
1352 1437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
1353 1438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pushFlag ){
1354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rid = rid_from_uuid(&xfer.aToken[1], 0);
1439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rid = rid_from_uuid(&xfer.aToken[1], 0, 0);
1355 1440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rid ) send_file(&xfer, rid, &xfer.aToken[1], 0);
1356 1441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1357 1442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else
1358 1443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* igot UUID
1444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* igot UUID ?PRIVATEFLAG?
1360 1445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1361 1446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Server announces that it has a particular file. If this is
1362 1447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** not a file that we have and we are pulling, then create a
1363 1448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** phantom to cause this file to be requested on the next cycle.
1364 1449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Always remember that the server has this file so that we do
1365 1450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** not transmit it by accident.
1451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
1452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the PRIVATE argument exists and is 1, then the file is
1453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** private. Pretend it does not exists if we are not pulling
1454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** private files.
1366 1455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( xfer.nToken==2
1456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( xfer.nToken>=2
1368 1457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& blob_eq(&xfer.aToken[0], "igot")
1369 1458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& blob_is_uuid(&xfer.aToken[1])
1370 1459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
1371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rid = rid_from_uuid(&xfer.aToken[1], 0);
1460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rid;
1461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isPriv = xfer.nToken>=3 && blob_eq(&xfer.aToken[1],"1");
1462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rid = rid_from_uuid(&xfer.aToken[1], 0, 0);
1372 1463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rid>0 ){
1373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- content_make_public(rid);
1464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !isPriv ) content_make_public(rid);
1465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( !g.okPrivate ){
1466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* ignore private files */
1374 1467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( pullFlag || cloneFlag ){
1375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rid = content_new(blob_str(&xfer.aToken[1]), 0);
1468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rid = content_new(blob_str(&xfer.aToken[1]), isPriv);
1376 1469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rid ) newPhantom = 1;
1377 1470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1378 1471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
remote_has(rid);
1379 1472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else
1380 1473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -1454,10 +1547,21 @@
1454 1547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** same server.
1455 1548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1456 1549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( blob_eq(&xfer.aToken[0], "cookie") && xfer.nToken==2 ){
1457 1550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_set("cookie", blob_str(&xfer.aToken[1]), 0);
1458 1551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else
1552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* private
1555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
1556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This card indicates that the next "file" or "cfile" will contain
1557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** private content.
1558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
1559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( blob_eq(&xfer.aToken[0], "private") ){
1560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ xfer.nextIsPrivate = 1;
1561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else
1562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1459 1563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1460 1564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* clone_seqno N
1461 1565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1462 1566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** When doing a clone, the server tries to send all of its artifacts
1463 1567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in sequence. This card indicates the sequence number of the next
1464 1568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!