How can I parse form-data manually at node js?
I get chunks of the large file at the server side. And can't merge it, because it will borrow RAM equals to the (file size + file info size).
As far as I understand, I can't use the libraries, such as multer/connect-busboy/connect-multiparty etc.
In simple terms, now I get following data at server side and can't figure out how to receive, example, a file name, and how to determine, which byte is responsible for the beginning of the file.
[1] Get request...
[1] data: <Buffer 2d 2d 2d 2d 2d 2d 57 65 62 4b 69 74 46 6f 72 6d 42 6f 75 6e 64 61 72 79 62 66 30 31 63 62 36 38 71 4d 41 4d 36 6d 51 31 0d 0a 43 6f 6e 74 65 6e 74 2d ... 65486 more bytes>
[1] data: <Buffer 02 10 00 00 01 ce 00 00 01 ef 00 00 14 e4 00 00 01 de 00 00 01 b2 00 00 01 d8 00 05 f0 1a 00 00 06 70 00 00 00 fa 00 00 00 cf 00 00 0a 3b 00 00 01 4a ... 65486 more bytes>
[1] data: <Buffer 31 52 2e 9a 5b df 11 19 5f c2 5d 38 ed db 23 00 06 05 bd 8f 71 e7 6b 03 9d 3a 88 e3 24 10 00 0f a1 10 43 82 ff 67 bd 5d eb 8e 59 fe a9 d3 e6 45 f2 9e ... 65486 more bytes>
[1] data: <Buffer 2b 6c cf 18 40 13 d8 fd 09 fa 56 25 e6 6d 6a 57 94 8c a4 9c d1 7b 99 bb 20 c0 21 e7 4a 1f 72 5a a5 3d 8e 84 5d 97 eb 1b 0f db b1 a9 81 f9 db ef 06 36 ... 65486 more bytes>
[1] data: <Buffer bb 29 4b 0d 06 1d 69 e1 c7 47 a7 99 c6 e4 c3 48 2e 85 6a b3 57 01 68 09 00 aa 6d b4 7b c7 07 2f 73 c0 c4 6b c4 48 9b 8f 81 64 8e 25 c7 a3 de c3 4f 2a ... 65486 more bytes>
[1] data: <Buffer 21 2b 1c dd 57 02 23 f5 43 a1 70 72 b4 8d 8d a8 4a 4b c1 e1 21 75 84 ed 07 00 34 de 5c 8d b0 0a 6f 99 60 28 34 b1 c5 bd a2 3c 3e d5 01 0f 62 57 a8 e8 ... 65486 more bytes>
[1] data: <Buffer 2d 96 e3 47 75 ce 25 63 77 26 15 96 b6 43 b9 d2 59 7d 12 c9 64 b2 11 f2 39 29 3e bf 83 1a f3 15 7b 14 ee f3 33 52 5c 39 34 75 06 41 2f e7 11 e8 26 4e ... 65486 more bytes>
[1] data: <Buffer 4a 9d 20 c7 a8 55 35 22 26 ff c7 b4 11 d9 6c 4d ce e1 a0 b2 b3 01 37 da 6a ad ae 98 fd 9b 8e 9c 8b 4a 27 8e e3 10 4a dc 80 f2 50 df 88 d9 c8 f9 ef 48 ... 65486 more bytes>
[1] data: <Buffer 52 ee b3 96 1f 7c af df fa 3f 9c 9a f7 01 20 7d 3f ea 4e 7e aa 4e d9 57 31 cb b5 f3 09 49 c7 ee 92 83 2e cb 58 d2 ea 1b b0 35 2a 3c 6c 27 75 0c d0 39 ... 65486 more bytes>
...more
...more
...and more
After receiving all the above data, I need to get file name and send each chunk of the file(not other info, such as name/mime type) to another client. (It's file sharing web resource)
Another solutions?
At the same time, I could to send the file separated manually by the chunks of type ArrayBuffer. Each chunk would be encoded additional information, like a "file name", "mime type". But in this case, I should to separate file at client side and get again the above problem the lack of memory.
A working solution, but a bit insecure. Send the file name and mime type separately from the main file data.
The part of the code responsible for sending data:
app.get(`/${senderId}/get`, (request, response) => {
let countChunks = 0;
// waiting for the sender's request now...
app.post(`/${senderId}/send`, (requestSender, responseSender) => {
// start sharing...
let countChunks = 0;
requestSender.on("data", (chunk) => {
if (countChunks === 0) {
// need get the name from the chunks
const fileName = "test_name";
response.setHeader("Content-Disposition", `attachment; filename="${fileName}"`);
}
countChunks += 1;
// need to get the first byte of the file data and start sending starting with it
response.write(chunk);
})
requestSender.on("end", () => {
response.end();
})
})
})
Suppose I create a simple PNG with:
convert -size 1x1 canvas:red red.png
Here is a similar image (bigger size) for reference:
Then run the command identify on it. It tells me the ColorSpace of the image is sRGB but there seems to be NO indication of this inside the file. In fact running
$ hexdump -C red.png
00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG........IHDR|
00000010 00 00 00 01 00 00 00 01 01 03 00 00 00 25 db 56 |.............%.V|
00000020 ca 00 00 00 04 67 41 4d 41 00 00 b1 8f 0b fc 61 |.....gAMA......a|
00000030 05 00 00 00 20 63 48 52 4d 00 00 7a 26 00 00 80 |.... cHRM..z&...|
00000040 84 00 00 fa 00 00 00 80 e8 00 00 75 30 00 00 ea |...........u0...|
00000050 60 00 00 3a 98 00 00 17 70 9c ba 51 3c 00 00 00 |`..:....p..Q<...|
00000060 06 50 4c 54 45 ff 00 00 ff ff ff 41 1d 34 11 00 |.PLTE......A.4..|
00000070 00 00 01 62 4b 47 44 01 ff 02 2d de 00 00 00 07 |...bKGD...-.....|
00000080 74 49 4d 45 07 e5 01 0d 17 04 37 80 ef 04 02 00 |tIME......7.....|
00000090 00 00 0a 49 44 41 54 08 d7 63 60 00 00 00 02 00 |...IDAT..c`.....|
000000a0 01 e2 21 bc 33 00 00 00 25 74 45 58 74 64 61 74 |..!.3...%tEXtdat|
000000b0 65 3a 63 72 65 61 74 65 00 32 30 32 31 2d 30 31 |e:create.2021-01|
000000c0 2d 31 33 54 32 33 3a 30 34 3a 35 35 2b 30 30 3a |-13T23:04:55+00:|
000000d0 30 30 2d af d4 01 00 00 00 25 74 45 58 74 64 61 |00-......%tEXtda|
000000e0 74 65 3a 6d 6f 64 69 66 79 00 32 30 32 31 2d 30 |te:modify.2021-0|
000000f0 31 2d 31 33 54 32 33 3a 30 34 3a 35 35 2b 30 30 |1-13T23:04:55+00|
00000100 3a 30 30 5c f2 6c bd 00 00 00 00 49 45 4e 44 ae |:00\.l.....IEND.|
00000110 42 60 82 |B`.|
00000113
does not provide a clue, that I know of.
I understand that identifying the ColorSpace of an image, that does not contain that information, is a very hard problem -- see one proposed solution looking at the histogram of colors here.
So how identify, from the ImageMagick suite, determines the ColorSpace of this image?
It is common, but not standardized to assume that an image without an embedded or sidecar ICC profile or without an explicit encoding description is encoded according to IEC 61966-2-1:1999, i.e. sRGB specification.
This is just a bug in ImageMagick. You can use exiftool to check whether sRGB + intent chunk is present. In this case, no.
Gamma 2.2 is not sRGB. Thus ImageMagic is wrong here. That is a common problem on Wikipedia, all SVG images when converted to PNG have this and it destroys the colours. See: https://phabricator.wikimedia.org/T26768
We will have to reencode all images on Wikipedia, since we use ImageMagick. Sigh.
since the dotnet version of Realm.Server has a problem with certificates (see https://forums.realm.io/t/net-realm-server-notifier-startasync-never-connects-to-realm-cloud-instance-because-of-ssl-exception/1625), it was suggested by realm to use the nodejs package.
I am quite new to nodejs and so I tried to implement a change event listener using node. All that based on https://docs.realm.io/platform/using-synced-realms/server-side-usage/data-change-events#creating-event-handlers-in-node-js.
Unfortunatly I am not able to get it working.
The node process stops running when realm is trying to connect (or at least is doing something in background). Anyhow the addListener method makes it stop.
I am sorry but there is not much I could provide. I've attached my sample code and the console output of the node process.
Does anyone has any experience with it? Or any tips where I could look up for some detailed logs, etc.?
Thanks in advance!!
'use strict';
const realm = require('realm');
const http = require('http');
const name = 'node-hello-world';
const port = '8888';
const app = new http.Server();
// the URL to the Realm Object Server
const realmUrl = '//myinstance.de1a.cloud.realm.io';
const userName = 'admin';
const userPassword = 'AnyPassword';
// The regular expression you provide restricts the observed Realm files to only the subset you
// are actually interested in. This is done in a separate step to avoid the cost
// of computing the fine-grained change set if it's not necessary.
const notifierPath = '^/([^/]+)/user-data';
//declare admin user
let adminUser = undefined;
// The handleChange callback is called for every observed Realm file whenever it
// has changes. It is called with a change event which contains the path, the Realm,
// a version of the Realm from before the change, and indexes indication all objects
// which were added, deleted, or modified in this change
var handleChange = async function(changeEvent) {
// Extract the user ID from the virtual path, assuming that we're using
// a filter which only subscribes us to updates of user-scoped Realms.
var matches = changeEvent.path.match("^/([^/]+)/([^/]+)$");
var userId = matches[1];
var r = changeEvent.realm;
console.log(`Change event for ${userId}`);
};
// register the event handler callback
async function main() {
try {
realm.Sync.setLogLevel('all');
console.log("Creating instance of credentials");
var credentials = realm.Sync.Credentials.usernamePassword(userName, userPassword);
console.log("Logging in user.");
adminUser = await realm.Sync.User.login(`https:${realmUrl}`, credentials);
console.log(`Adding realm listener for path ${notifierPath}`);
//if this line was called, the console will exit in a few seconds; if not the node process will continue running
realm.Sync.addListener(`realms:${realmUrl}`, adminUser, notifierPath, 'change', handleChange);
console.log("Added listener");
} catch (exception) {
console.log("An error has occured.");
console.log(exception);
}
}
main();
app.on('request', (req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write('Hello World');
res.end('\n');
});
app.listen(port, () => {
console.log(`${name} is listening on port ${port}`);
});
------------------------------
Path>node app.js
Creating instance of credentials
Logging in user.
node-hello-world is listening on port 8888
Adding realm listener for path ^/([^/]+)/user-data
Global notifier: start()
Realm sync client ([realm-core-5.10.1], [realm-sync-3.10.0], protocol version 25)
Config param: max_open_files = 256
Config param: one_connection_per_session = 1
Config param: connect_timeout = 600000 ms
Config param: connection_linger_time = 30000 ms
Config param: ping_keepalive_period = 600000 ms
Config param: pong_keepalive_timeout = 600000 ms
Config param: fast_reconnect_limit = 60000 ms
Config param: enable_upload_log_compaction = 1
Config param: tcp_no_delay = 0
Added listener
Connection[1]: WebSocket::Websocket()
Connection[1]: Session[1]: Binding 'Path\realm-object-server\listener\realms.realm' to '/__admin'
Connection[1]: Session[1]: Activating
Opening Realm file: Path\realm-object-server\listener\realms.realm
Connection[1]: Session[1]: last_version_available = 0
Connection[1]: Session[1]: progress_server_version = 0
Connection[1]: Session[1]: progress_client_version = 0
Using already open Realm file: Path\realm-object-server\listener\realms.realm
Connection[1]: Session[1]: Progress handler called, downloaded = 0, downloadable = 0, uploaded = 0, uploadable = 0, progress version = 0, snapshot version = 1
Connection[1]: Resolving 'myinstance.de1a.cloud.realm.io:443'
Connection[1]: Connecting to endpoint '18.185.186.xx:443' (1/3)
Connection[1]: Connected to endpoint '18.185.186.xx:443' (from '127.0.0.1:53094')
Connection[1]: Verifying server SSL certificate using root certificates, host name = myinstance.de1a.cloud.realm.io, server port = 443, certificate =
-----BEGIN CERTIFICATE-----
MIIEdTCCA12gAwIBAgIJAKcOSkw0grd/MA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNV
BAYTAlVTMSUwIwYDVQQKExxTdGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTIw
MAYDVQQLEylTdGFyZmllbGQgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
eTAeFw0wOTA5MDIwMDAwMDBaFw0zNDA2MjgxNzM5MTZaMIGYMQswCQYDVQQGEwJV
UzEQMA4GA1UECBMHQXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTElMCMGA1UE
ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjE7MDkGA1UEAxMyU3RhcmZp
ZWxkIFNlcnZpY2VzIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IC0gRzIwggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVDDrEKvlO4vW+GZdfjohTsR8/
y8+fIBNtKTrID30892t2OGPZNmCom15cAICyL1l/9of5JUOG52kbUpqQ4XHj2C0N
Tm/2yEnZtvMaVq4rtnQU68/7JuMauh2WLmo7WJSJR1b/JaCTcFOD2oR0FMNnngRo
Ot+OQFodSk7PQ5E751bWAHDLUu57fa4657wx+UX2wmDPE1kCK4DMNEffud6QZW0C
zyyRpqbn3oUYSXxmTqM6bam17jQuug0DuDPfR+uxa40l2ZvOgdFFRjKWcIfeAg5J
Q4W2bHO7ZOphQazJ1FTfhy/HIrImzJ9ZVGif/L4qL8RVHHVAYBeFAlU5i38FAgMB
AAGjgfAwge0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0O
BBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMB8GA1UdIwQYMBaAFL9ft9HO3R+G9FtV
rNzXEMIOqYjnME8GCCsGAQUFBwEBBEMwQTAcBggrBgEFBQcwAYYQaHR0cDovL28u
c3MyLnVzLzAhBggrBgEFBQcwAoYVaHR0cDovL3guc3MyLnVzL3guY2VyMCYGA1Ud
HwQfMB0wG6AZoBeGFWh0dHA6Ly9zLnNzMi51cy9yLmNybDARBgNVHSAECjAIMAYG
BFUdIAAwDQYJKoZIhvcNAQELBQADggEBACMd44pXyn3pF3lM8R5V/cxTbj5HD9/G
VfKyBDbtgB9TxF00KGu+x1X8Z+rLP3+QsjPNG1gQggL4+C/1E2DUBc7xgQjB3ad1
l08YuW3e95ORCLp+QCztweq7dp4zBncdDQh/U90bZKuCJ/Fp1U1ervShw3WnWEQt
8jxwmKy6abaVd38PMV4s/KCHOkdp8Hlf9BRUpJVeEXgSYCfOn8J3/yNTd126/+pZ
59vPr5KW7ySaNRB6nJHGDn2Z9j8Z3/VyVOEVqQdZe4O/Ui5GjLIAZHYcSNPYeehu
VsyuLAOQ1xk4meTKCRlb/weWsKh/NEnfVqn3sF/tM+2MR7cwA130A4w=
-----END CERTIFICATE-----
Connection[1]: Verifying server SSL certificate using 155 root certificates
Connection[1]: Server SSL certificate verified using root certificate(29):
-----BEGIN CERTIFICATE-----
MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UE
ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENs
YXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5
MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2ll
cywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRo
b3JpdHkwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N
78gDGIc/oav7PKaf8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMe
j2YcOadN+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0
X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4Umkhyn
ArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W
93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRb
Vazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0fhvRbVazc1xDCDqmI56FspGowaDEL
MAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAw
BgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1ep
oXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D
eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJlxy16paq8
U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJDKVtH
CN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
QBFGmh95DmK/D5fs4C8fF5Q=
-----END CERTIFICATE-----
Connection[1]: WebSocket::initiate_client_handshake()
Connection[1]: HTTP request =
GET /realm-sync/%2F__admin HTTP/1.1
Authorization: Realm-Access-Token version=1 token="xxx"
Connection: Upgrade
Host: myinstance.de1a.cloud.realm.io
Sec-WebSocket-Key: 0TpYePZIZMhOid08TiAQzw==
Sec-WebSocket-Protocol: io.realm.sync.25
Sec-WebSocket-Version: 13
Upgrade: websocket
Connection[1]: WebSocket::handle_http_response_received()
Connection[1]: HTTP response = HTTP/1.1 101 Switching Protocols
Connection: upgrade
Date: Sun, 14 Oct 2018 11:22:13 GMT
sec-websocket-accept: A/hVVKTFOsJneK3U/SBQMisIyIg=
sec-websocket-protocol: io.realm.sync.25
Server: nginx/1.13.5
upgrade: websocket
Connection[1]: Will emit a ping in 467729 milliseconds
Connection[1]: Session[1]: Sending: BIND(path='/__admin', signed_user_token_size=601, need_client_file_ident=1)
Connection[1]: Session[1]: Received: IDENT(client_file_ident=13, client_file_ident_salt=7274062357029523918)
Using already open Realm file: Path\realm-object-server\listener\realms.realm
Connection[1]: Session[1]: Sending: IDENT(client_file_ident=13, client_file_ident_salt=7274062357029523918, scan_server_version=0, scan_client_version=0, latest_server_version=0, latest_server_version_salt=0)
Connection[1]: Session[1]: Sending: MARK(request_ident=2)
Download message compression: is_body_compressed = 1, compressed_body_size=2054, uncompressed_body_size=5474
Received: DOWNLOAD CHANGESET(server_version=1, client_version=0, origin_timestamp=119025057956, origin_file_ident=2, original_changeset_size=370, changeset_size=370)
Changeset: 3F 00 07 41 63 63 6F 75 6E 74 3F 01 0A 50 65 72 6D 69 73 73 69 6F 6E 3F 02 09 52 65 61 6C 6D 46 69 6C 65 3F 03 04 70 61 74 68 3F 04 04 55 73 65 72 3F 05 06 75 73 65 72 49 64 3F 06 0F 55 73 65 72 4D 65 74 61 64 61 74 61 52 6F 77 3F 07 08 70 72 6F 76 69 64 65 72 3F 08 0A 70 72 6F 76 69 64 65 72 49 64 3F 09 04 75 73 65 72 3F 0A 09 72 65 61 6C 6D 46 69 6C 65 3F 0B 07 6D 61 79 52 65 61 64 3F 0C 08 6D 61 79 57 72 69 74 65 3F 0D 09 6D 61 79 4D 61 6E 61 67 65 3F 0E 09 75 70 64 61 74 65 64 41 74 3F 0F 09 72 65 61 6C 6D 54 79 70 65 3F 10 09 73 79 6E 63 4C 61 62 65 6C 3F 11 05 6F 77 6E 65 72 3F 12 09 63 72 65 61 74 65 64 41 74 3F 13 07 69 73 41 64 6D 69 6E 3F 14 08 61 63 63 6F 75 6E 74 73 3F 15 08 6D 65 74 61 64 61 74 61 3F 16 03 6B 65 79 3F 17 05 76 61 6C 75 65 02 00 00 02 01 00 02 02 01 03 02 00 02 04 01 05 02 00 02 06 00 00 00 0B 07 02 00 00 0B 08 02 00 00 00 01 0B 09 0C 00 04 0B 0A 0C 00 02 0B 0B 01 00 00 0B 0C 01 00 00 0B 0D 01 00 00 0B 0E 08 00 00 00 02 0B 0F 02 00 00 0B 10 02 00 00 0B 11 0C 00 04 0B 12 08 00 00 00 04 0B 13 01 00 00 0B 14 0D 00 00 0B 15 0D 00 06 00 06 0B 16 02 00 00 0B 17 02 00 00
Received: DOWNLOAD CHANGESET(server_version=2, client_version=0, origin_timestamp=119025057963, origin_file_ident=2, original_changeset_size=208, changeset_size=208)
Changeset: 3F 00 09 52 65 61 6C 6D 46 69 6C 65 3F 01 09 72 65 61 6C 6D 54 79 70 65 3F 02 09 73 79 6E 63 4C 61 62 65 6C 3F 03 05 6F 77 6E 65 72 3F 04 09 63 72 65 61 74 65 64 41 74 00 00 04 D5 88 82 E0 F4 F3 85 E4 E0 00 A4 E3 DF D7 AD A0 B3 BA 07 02 08 2F 64 65 66 61 75 6C 74 06 02 01 D5 88 82 E0 F4 F3 85 E4 E0 00 A4 E3 DF D7 AD A0 B3 BA 07 00 09 72 65 66 65 72 65 6E 63 65 06 02 02 D5 88 82 E0 F4 F3 85 E4 E0 00 A4 E3 DF D7 AD A0 B3 BA 07 00 07 64 65 66 61 75 6C 74 06 40 03 D5 88 82 E0 F4 F3 85 E4 E0 00 A4 E3 DF D7 AD A0 B3 BA 07 00 06 08 04 D5 88 82 E0 F4 F3 85 E4 E0 00 A4 E3 DF D7 AD A0 B3 BA 07 00 A1 F7 F2 DD 05 C0 ED 98 CB 03
Received: DOWNLOAD CHANGESET(server_version=3, client_version=0, origin_timestamp=119025058022, origin_file_ident=2, original_changeset_size=202, changeset_size=202)
Changeset: 3F 00 09 52 65 61 6C 6D 46 69 6C 65 3F 01 09 72 65 61 6C 6D 54 79 70 65 3F 02 09 73 79 6E 63 4C 61 62 65 6C 3F 03 05 6F 77 6E 65 72 3F 04 09 63 72 65 61 74 65 64 41 74 00 00 04 C1 CF E7 BE C5 FA 94 88 07 AD E1 ED 8E 8E 83 8F D2 D0 00 02 08 2F 5F 5F 61 64 6D 69 6E 06 02 01 C1 CF E7 BE C5 FA 94 88 07 AD E1 ED 8E 8E 83 8F D2 D0 00 00 04 66 75 6C 6C 06 02 02 C1 CF E7 BE C5 FA 94 88 07 AD E1 ED 8E 8E 83 8F D2 D0 00 00 07 64 65 66 61 75 6C 74 06 40 03 C1 CF E7 BE C5 FA 94 88 07 AD E1 ED 8E 8E 83 8F D2 D0 00 00 06 08 04 C1 CF E7 BE C5 FA 94 88 07 AD E1 ED 8E 8E 83 8F D2 D0 00 00 A2 F7 F2 DD 05 80 E3 BE 0A
Received: DOWNLOAD CHANGESET(server_version=4, client_version=0, origin_timestamp=119025058024, origin_file_ident=2, original_changeset_size=201, changeset_size=201)
Changeset: 3F 00 09 52 65 61 6C 6D 46 69 6C 65 3F 01 09 72 65 61 6C 6D 54 79 70 65 3F 02 09 73 79 6E 63 4C 61 62 65 6C 3F 03 05 6F 77 6E 65 72 3F 04 09 63 72 65 61 74 65 64 41 74 00 00 04 D5 C0 D0 E0 A8 C1 8C EB EE 01 9A F3 F6 F5 D9 BE D2 99 37 02 07 2F 5F 5F 70 65 72 6D 06 02 01 D5 C0 D0 E0 A8 C1 8C EB EE 01 9A F3 F6 F5 D9 BE D2 99 37 00 04 66 75 6C 6C 06 02 02 D5 C0 D0 E0 A8 C1 8C EB EE 01 9A F3 F6 F5 D9 BE D2 99 37 00 07 64 65 66 61 75 6C 74 06 40 03 D5 C0 D0 E0 A8 C1 8C EB EE 01 9A F3 F6 F5 D9 BE D2 99 37 00 06 08 04 D5 C0 D0 E0 A8 C1 8C EB EE 01 9A F3 F6 F5 D9 BE D2 99 37 00 A2 F7 F2 DD 05 80 EC B8 0B
Received: DOWNLOAD CHANGESET(server_version=5, client_version=0, origin_timestamp=119025058029, origin_file_ident=2, original_changeset_size=221, changeset_size=221)
Changeset: 3F 00 09 52 65 61 6C 6D 46 69 6C 65 3F 01 09 72 65 61 6C 6D 54 79 70 65 3F 02 09 73 79 6E 63 4C 61 62 65 6C 3F 03 05 6F 77 6E 65 72 3F 04 09 63 72 65 61 74 65 64 41 74 00 00 04 B2 F8 DA D1 D7 8D 8F FF C7 01 BD EE F4 A5 FA DB D4 C2 FC 01 02 16 2F 5F 5F 77 69 6C 64 63 61 72 64 70 65 72 6D 69 73 73 69 6F 6E 73 06 02 01 B2 F8 DA D1 D7 8D 8F FF C7 01 BD EE F4 A5 FA DB D4 C2 FC 01 00 04 66 75 6C 6C 06 02 02 B2 F8 DA D1 D7 8D 8F FF C7 01 BD EE F4 A5 FA DB D4 C2 FC 01 00 07 64 65 66 61 75 6C 74 06 40 03 B2 F8 DA D1 D7 8D 8F FF C7 01 BD EE F4 A5 FA DB D4 C2 FC 01 00 06 08 04 B2 F8 DA D1 D7 8D 8F FF C7 01 BD EE F4 A5 FA DB D4 C2 FC 01 00 A2 F7 F2 DD 05 C0 82 EA 0D
Received: DOWNLOAD CHANGESET(server_version=6, client_version=0, origin_timestamp=119025058030, origin_file_ident=2, original_changeset_size=215, changeset_size=215)
Changeset: 3F 00 09 52 65 61 6C 6D 46 69 6C 65 3F 01 09 72 65 61 6C 6D 54 79 70 65 3F 02 09 73 79 6E 63 4C 61 62 65 6C 3F 03 05 6F 77 6E 65 72 3F 04 09 63 72 65 61 74 65 64 41 74 00 00 04 BD F9 DE AC C3 D1 DF 9F D0 01 F7 EC A4 D8 9A 88 A5 A3 EB 01 02 10 2F 5F 5F 63 6F 6E 66 69 67 75 72 61 74 69 6F 6E 06 02 01 BD F9 DE AC C3 D1 DF 9F D0 01 F7 EC A4 D8 9A 88 A5 A3 EB 01 00 04 66 75 6C 6C 06 02 02 BD F9 DE AC C3 D1 DF 9F D0 01 F7 EC A4 D8 9A 88 A5 A3 EB 01 00 07 64 65 66 61 75 6C 74 06 40 03 BD F9 DE AC C3 D1 DF 9F D0 01 F7 EC A4 D8 9A 88 A5 A3 EB 01 00 06 08 04 BD F9 DE AC C3 D1 DF 9F D0 01 F7 EC A4 D8 9A 88 A5 A3 EB 01 00 A2 F7 F2 DD 05 80 87 A7 0E
Received: DOWNLOAD CHANGESET(server_version=7, client_version=0, origin_timestamp=119025058068, origin_file_ident=2, original_changeset_size=180, changeset_size=180)
Changeset: 3F 00 04 55 73 65 72 3F 01 07 69 73 41 64 6D 69 6E 3F 02 07 41 63 63 6F 75 6E 74 3F 03 08 70 72 6F 76 69 64 65 72 3F 04 0A 70 72 6F 76 69 64 65 72 49 64 3F 05 08 61 63 63 6F 75 6E 74 73 00 00 04 8E C8 AA AB FC ED C0 8E EB 01 C1 AC DB FD BE E9 C9 A9 0C 02 07 5F 5F 61 64 6D 69 6E 06 01 01 8E C8 AA AB FC ED C0 8E EB 01 C1 AC DB FD BE E9 C9 A9 0C 00 01 00 02 04 02 00 00 06 02 03 02 00 00 05 72 65 61 6C 6D 06 02 04 02 00 00 07 5F 5F 61 64 6D 69 6E 00 00 01 05 8E C8 AA AB FC ED C0 8E EB 01 C1 AC DB FD BE E9 C9 A9 0C 02 0E 0C 00 00 02 02 00
Received: DOWNLOAD CHANGESET(server_version=8, client_version=0, origin_timestamp=119025058091, origin_file_ident=2, original_changeset_size=164, changeset_size=164)
Changeset: 3F 00 0A 50 65 72 6D 69 73 73 69 6F 6E 3F 01 04 75 73 65 72 3F 02 09 52 65 61 6C 6D 46 69 6C 65 3F 03 09 72 65 61 6C 6D 46 69 6C 65 3F 04 07 6D 61 79 52 65 61 64 3F 05 08 6D 61 79 57 72 69 74 65 3F 06 09 6D 61 79 4D 61 6E 61 67 65 3F 07 09 75 70 64 61 74 65 64 41 74 00 00 04 02 00 00 06 40 01 02 00 00 06 0C 03 02 00 00 02 B2 F8 DA D1 D7 8D 8F FF C7 01 BD EE F4 A5 FA DB D4 C2 FC 01 06 01 04 02 00 00 01 06 01 05 02 00 00 00 06 01 06 02 00 00 00 06 08 07 02 00 00 A2 F7 F2 DD 05 C0 99 B2 2B
Received: DOWNLOAD CHANGESET(server_version=9, client_version=0, origin_timestamp=119025058092, origin_file_ident=2, original_changeset_size=163, changeset_size=163)
Changeset: 3F 00 0A 50 65 72 6D 69 73 73 69 6F 6E 3F 01 04 75 73 65 72 3F 02 09 52 65 61 6C 6D 46 69 6C 65 3F 03 09 72 65 61 6C 6D 46 69 6C 65 3F 04 07 6D 61 79 52 65 61 64 3F 05 08 6D 61 79 57 72 69 74 65 3F 06 09 6D 61 79 4D 61 6E 61 67 65 3F 07 09 75 70 64 61 74 65 64 41 74 00 00 04 02 01 00 06 40 01 02 01 00 06 0C 03 02 01 00 02 D5 C0 D0 E0 A8 C1 8C EB EE 01 9A F3 F6 F5 D9 BE D2 99 37 06 01 04 02 01 00 01 06 01 05 02 01 00 00 06 01 06 02 01 00 00 06 08 07 02 01 00 A2 F7 F2 DD 05 80 9E EF 2B
Received: DOWNLOAD CHANGESET(server_version=10, client_version=0, origin_timestamp=119025058119, origin_file_ident=2, original_changeset_size=237, changeset_size=237)
Changeset: 3F 00 09 52 65 61 6C 6D 46 69 6C 65 3F 01 09 72 65 61 6C 6D 54 79 70 65 3F 02 09 73 79 6E 63 4C 61 62 65 6C 3F 03 04 55 73 65 72 3F 04 05 6F 77 6E 65 72 3F 05 09 63 72 65 61 74 65 64 41 74 00 00 04 82 AD AB 8D A8 BD E3 D4 D9 01 FC DA CA A1 C6 CA F6 F0 EF 00 02 0B 2F 5F 5F 70 61 73 73 77 6F 72 64 06 02 01 82 AD AB 8D A8 BD E3 D4 D9 01 FC DA CA A1 C6 CA F6 F0 EF 00 00 04 66 75 6C 6C 06 02 02 82 AD AB 8D A8 BD E3 D4 D9 01 FC DA CA A1 C6 CA F6 F0 EF 00 00 07 64 65 66 61 75 6C 74 06 0C 04 82 AD AB 8D A8 BD E3 D4 D9 01 FC DA CA A1 C6 CA F6 F0 EF 00 00 03 8E C8 AA AB FC ED C0 8E EB 01 C1 AC DB FD BE E9 C9 A9 0C 06 08 05 82 AD AB 8D A8 BD E3 D4 D9 01 FC DA CA A1 C6 CA F6 F0 EF 00 00 A2 F7 F2 DD 05 C0 97 DF 38
Received: DOWNLOAD CHANGESET(server_version=11, client_version=0, origin_timestamp=119025058319, origin_file_ident=2, original_changeset_size=203, changeset_size=203)
Changeset: 3F 00 04 55 73 65 72 3F 01 07 69 73 41 64 6D 69 6E 3F 02 07 41 63 63 6F 75 6E 74 3F 03 08 70 72 6F 76 69 64 65 72 3F 04 0A 70 72 6F 76 69 64 65 72 49 64 3F 05 08 61 63 63 6F 75 6E 74 73 00 00 04 F5 B4 A5 81 FC F6 F9 EC C5 00 A8 A5 E5 DA ED F8 FD F7 E5 00 02 0B 72 65 61 6C 6D 2D 61 64 6D 69 6E 06 01 01 F5 B4 A5 81 FC F6 F9 EC C5 00 A8 A5 E5 DA ED F8 FD F7 E5 00 00 01 00 02 04 02 01 00 06 02 03 02 01 00 11 6A 77 74 2F 63 65 6E 74 72 61 6C 2D 6F 77 6E 65 72 06 02 04 02 01 00 0B 72 65 61 6C 6D 2D 61 64 6D 69 6E 00 00 01 05 F5 B4 A5 81 FC F6 F9 EC C5 00 A8 A5 E5 DA ED F8 FD F7 E5 00 02 0E 0C 00 00 02 02 01
Received: DOWNLOAD CHANGESET(server_version=12, client_version=0, origin_timestamp=119025076163, origin_file_ident=2, original_changeset_size=243, changeset_size=243)
Changeset: 3F 00 04 55 73 65 72 3F 01 07 69 73 41 64 6D 69 6E 3F 02 07 41 63 63 6F 75 6E 74 3F 03 08 70 72 6F 76 69 64 65 72 3F 04 0A 70 72 6F 76 69 64 65 72 49 64 3F 05 08 61 63 63 6F 75 6E 74 73 00 00 04 E7 AB C7 A5 E1 B6 BF C4 E9 01 D3 B0 F1 FF C9 F1 B1 BD D0 01 02 1F 73 79 73 74 65 6D 2D 61 63 63 65 73 73 69 62 69 6C 69 74 79 2D 74 65 73 74 73 2D 75 73 65 72 06 01 01 E7 AB C7 A5 E1 B6 BF C4 E9 01 D3 B0 F1 FF C9 F1 B1 BD D0 01 00 00 00 02 04 02 02 00 06 02 03 02 02 00 11 6A 77 74 2F 63 65 6E 74 72 61 6C 2D 61 64 6D 69 6E 06 02 04 02 02 00 1F 73 79 73 74 65 6D 2D 61 63 63 65 73 73 69 62 69 6C 69 74 79 2D 74 65 73 74 73 2D 75 73 65 72 00 00 01 05 E7 AB C7 A5 E1 B6 BF C4 E9 01 D3 B0 F1 FF C9 F1 B1 BD D0 01 02 0E 0C 00 00 02 02 02
Received: DOWNLOAD CHANGESET(server_version=13, client_version=0, origin_timestamp=119025559655, origin_file_ident=2, original_changeset_size=203, changeset_size=180)
Changeset: 3F 00 04 55 73 65 72 3F 01 07 69 73 41 64 6D 69 6E 3F 02 07 41 63 63 6F 75 6E 74 3F 03 08 70 72 6F 76 69 64 65 72 3F 04 0A 70 72 6F 76 69 64 65 72 49 64 3F 05 08 61 63 63 6F 75 6E 74 73 00 00 04 CA F1 CD DC 8C BF 9C DD 05 8F FD 81 EC E5 E0 A8 8C 3F 02 20 35 38 37 65 37 33 38 30 38 36 30 34 39 37 66 37 35 32 37 38 65 30 32 39 64 35 37 33 39 37 63 39 00 02 04 02 03 00 06 02 03 02 03 00 08 70 61 73 73 77 6F 72 64 06 02 04 02 03 00 05 61 64 6D 69 6E 00 00 01 05 CA F1 CD DC 8C BF 9C DD 05 8F FD 81 EC E5 E0 A8 8C 3F 02 0E 0C 00 00 02 02 03
Received: DOWNLOAD CHANGESET(server_version=14, client_version=0, origin_timestamp=119118101955, origin_file_ident=5, original_changeset_size=42, changeset_size=42)
Changeset: 3F 00 04 55 73 65 72 3F 01 07 69 73 41 64 6D 69 6E 00 00 06 01 01 CA F1 CD DC 8C BF 9C DD 05 8F FD 81 EC E5 E0 A8 8C 3F 00 01
Received: DOWNLOAD CHANGESET(server_version=15, client_version=0, origin_timestamp=119118127936, origin_file_ident=2, original_changeset_size=322, changeset_size=322)
Changeset: 3F 00 09 52 65 61 6C 6D 46 69 6C 65 3F 01 09 72 65 61 6C 6D 54 79 70 65 3F 02 09 73 79 6E 63 4C 61 62 65 6C 3F 03 04 55 73 65 72 3F 04 05 6F 77 6E 65 72 3F 05 09 63 72 65 61 74 65 64 41 74 00 00 04 99 F1 D7 F8 83 8F 9D 9C C3 01 96 F3 C4 AC C6 B4 B3 89 B0 01 02 DC 00 2F 64 65 66 61 75 6C 74 2F 5F 5F 70 61 72 74 69 61 6C 2F 35 38 37 65 37 33 38 30 38 36 30 34 39 37 66 37 35 32 37 38 65 30 32 39 64 35 37 33 39 37 63 39 2F 64 39 32 66 32 64 30 34 65 61 36 37 64 62 65 30 33 66 65 30 32 39 36 63 63 33 33 38 65 62 38 63 61 35 37 32 66 31 61 37 06 02 01 99 F1 D7 F8 83 8F 9D 9C C3 01 96 F3 C4 AC C6 B4 B3 89 B0 01 00 07 70 61 72 74 69 61 6C 06 02 02 99 F1 D7 F8 83 8F 9D 9C C3 01 96 F3 C4 AC C6 B4 B3 89 B0 01 00 07 64 65 66 61 75 6C 74 06 0C 04 99 F1 D7 F8 83 8F 9D 9C C3 01 96 F3 C4 AC C6 B4 B3 89 B0 01 00 03 CA F1 CD DC 8C BF 9C DD 05 8F FD 81 EC E5 E0 A8 8C 3F 06 08 05 99 F1 D7 F8 83 8F 9D 9C C3 01 96 F3 C4 AC C6 B4 B3 89 B0 01 00 AF CE F8 DD 05 80 F4 A8 BE 03
Received: DOWNLOAD CHANGESET(server_version=16, client_version=0, origin_timestamp=119120628443, origin_file_ident=2, original_changeset_size=317, changeset_size=317)
Changeset: 3F 00 09 52 65 61 6C 6D 46 69 6C 65 3F 01 09 72 65 61 6C 6D 54 79 70 65 3F 02 09 73 79 6E 63 4C 61 62 65 6C 3F 03 04 55 73 65 72 3F 04 05 6F 77 6E 65 72 3F 05 09 63 72 65 61 74 65 64 41 74 00 00 04 A6 C0 A4 C6 AA A3 E3 EC 2F 99 B7 CE BF D8 9E A6 CA C0 01 02 DC 00 2F 64 65 66 61 75 6C 74 2F 5F 5F 70 61 72 74 69 61 6C 2F 35 38 37 65 37 33 38 30 38 36 30 34 39 37 66 37 35 32 37 38 65 30 32 39 64 35 37 33 39 37 63 39 2F 37 65 35 36 38 34 36 33 36 66 39 63 62 31 32 31 35 32 35 63 64 62 66 38 31 32 33 39 31 32 64 36 31 30 66 39 62 38 62 30 06 02 01 A6 C0 A4 C6 AA A3 E3 EC 2F 99 B7 CE BF D8 9E A6 CA C0 01 00 07 70 61 72 74 69 61 6C 06 02 02 A6 C0 A4 C6 AA A3 E3 EC 2F 99 B7 CE BF D8 9E A6 CA C0 01 00 07 64 65 66 61 75 6C 74 06 0C 04 A6 C0 A4 C6 AA A3 E3 EC 2F 99 B7 CE BF D8 9E A6 CA C0 01 00 03 CA F1 CD DC 8C BF 9C DD 05 8F FD 81 EC E5 E0 A8 8C 3F 06 08 05 A6 C0 A4 C6 AA A3 E3 EC 2F 99 B7 CE BF D8 9E A6 CA C0 01 00 F4 E1 F8 DD 05 C0 C9 9E D3 01
Received: DOWNLOAD CHANGESET(server_version=17, client_version=0, origin_timestamp=119125943861, origin_file_ident=2, original_changeset_size=237, changeset_size=237)
Changeset: 3F 00 04 55 73 65 72 3F 01 07 69 73 41 64 6D 69 6E 3F 02 07 41 63 63 6F 75 6E 74 3F 03 08 70 72 6F 76 69 64 65 72 3F 04 0A 70 72 6F 76 69 64 65 72 49 64 3F 05 08 61 63 63 6F 75 6E 74 73 00 00 04 FB FF AB CD 89 DD 94 96 9C 01 D3 C3 DC DE BF E6 ED A0 D6 01 02 20 62 36 39 30 65 32 37 31 30 62 37 39 37 34 64 63 37 34 35 32 36 32 62 34 66 61 62 30 30 35 36 37 06 01 01 FB FF AB CD 89 DD 94 96 9C 01 D3 C3 DC DE BF E6 ED A0 D6 01 00 00 00 02 04 02 04 00 06 02 03 02 04 00 09 61 6E 6F 6E 79 6D 6F 75 73 06 02 04 02 04 00 20 30 37 31 62 32 66 35 38 33 66 35 35 31 36 34 35 34 30 32 35 64 61 37 33 62 33 66 63 62 30 63 62 00 00 01 05 FB FF AB CD 89 DD 94 96 9C 01 D3 C3 DC DE BF E6 ED A0 D6 01 02 0E 0C 00 00 02 02 04
Received: DOWNLOAD CHANGESET(server_version=18, client_version=0, origin_timestamp=119125944405, origin_file_ident=2, original_changeset_size=319, changeset_size=319)
Changeset: 3F 00 09 52 65 61 6C 6D 46 69 6C 65 3F 01 09 72 65 61 6C 6D 54 79 70 65 3F 02 09 73 79 6E 63 4C 61 62 65 6C 3F 03 04 55 73 65 72 3F 04 05 6F 77 6E 65 72 3F 05 09 63 72 65 61 74 65 64 41 74 00 00 04 C0 84 EF F4 9A DF 9A 8F 3A F9 BB AC E9 8C B7 CB B9 E0 00 02 DC 00 2F 64 65 66 61 75 6C 74 2F 5F 5F 70 61 72 74 69 61 6C 2F 62 36 39 30 65 32 37 31 30 62 37 39 37 34 64 63 37 34 35 32 36 32 62 34 66 61 62 30 30 35 36 37 2F 63 61 39 38 33 37 30 61 37 64 32 37 65 36 65 66 31 35 64 30 32 33 62 61 61 39 61 38 64 39 61 66 65 37 30 65 39 61 32 35 06 02 01 C0 84 EF F4 9A DF 9A 8F 3A F9 BB AC E9 8C B7 CB B9 E0 00 00 07 70 61 72 74 69 61 6C 06 02 02 C0 84 EF F4 9A DF 9A 8F 3A F9 BB AC E9 8C B7 CB B9 E0 00 00 07 64 65 66 61 75 6C 74 06 0C 04 C0 84 EF F4 9A DF 9A 8F 3A F9 BB AC E9 8C B7 CB B9 E0 00 00 03 FB FF AB CD 89 DD 94 96 9C 01 D3 C3 DC DE BF E6 ED A0 D6 01 06 08 05 C0 84 EF F4 9A DF 9A 8F 3A F9 BB AC E9 8C B7 CB B9 E0 00 00 B8 8B F9 DD 05 C0 9E 8F C1 01
Received: DOWNLOAD CHANGESET(server_version=19, client_version=0, origin_timestamp=119221571875, origin_file_ident=2, original_changeset_size=237, changeset_size=237)
Changeset: 3F 00 04 55 73 65 72 3F 01 07 69 73 41 64 6D 69 6E 3F 02 07 41 63 63 6F 75 6E 74 3F 03 08 70 72 6F 76 69 64 65 72 3F 04 0A 70 72 6F 76 69 64 65 72 49 64 3F 05 08 61 63 63 6F 75 6E 74 73 00 00 04 FF E6 E6 8D A6 9F DC 85 B8 01 CC D9 B6 E9 B8 99 A4 98 DF 01 02 20 66 39 36 62 35 34 36 37 66 35 38 64 63 61 37 36 66 36 64 65 64 66 30 62 36 34 65 31 34 37 32 38 06 01 01 FF E6 E6 8D A6 9F DC 85 B8 01 CC D9 B6 E9 B8 99 A4 98 DF 01 00 00 00 02 04 02 05 00 06 02 03 02 05 00 09 61 6E 6F 6E 79 6D 6F 75 73 06 02 04 02 05 00 20 62 31 64 34 61 30 32 32 65 37 34 33 33 65 31 37 61 36 37 30 39 32 63 33 66 66 30 36 34 65 36 64 00 00 01 05 FF E6 E6 8D A6 9F DC 85 B8 01 CC D9 B6 E9 B8 99 A4 98 DF 01 02 0E 0C 00 00 02 02 05
Received: DOWNLOAD CHANGESET(server_version=20, client_version=0, origin_timestamp=119221573405, origin_file_ident=2, original_changeset_size=319, changeset_size=319)
Changeset: 3F 00 09 52 65 61 6C 6D 46 69 6C 65 3F 01 09 72 65 61 6C 6D 54 79 70 65 3F 02 09 73 79 6E 63 4C 61 62 65 6C 3F 03 04 55 73 65 72 3F 04 05 6F 77 6E 65 72 3F 05 09 63 72 65 61 74 65 64 41 74 00 00 04 C0 E3 A0 CD C2 D2 E7 AD FD 01 A8 EB B2 F0 AC A7 FB 97 34 02 DC 00 2F 64 65 66 61 75 6C 74 2F 5F 5F 70 61 72 74 69 61 6C 2F 66 39 36 62 35 34 36 37 66 35 38 64 63 61 37 36 66 36 64 65 64 66 30 62 36 34 65 31 34 37 32 38 2F 33 33 61 31 62 62 30 64 62 63 33 61 34 64 65 39 65 65 63 63 66 34 62 63 34 38 61 62 63 39 32 62 32 61 37 38 61 61 37 30 06 02 01 C0 E3 A0 CD C2 D2 E7 AD FD 01 A8 EB B2 F0 AC A7 FB 97 34 00 07 70 61 72 74 69 61 6C 06 02 02 C0 E3 A0 CD C2 D2 E7 AD FD 01 A8 EB B2 F0 AC A7 FB 97 34 00 07 64 65 66 61 75 6C 74 06 0C 04 C0 E3 A0 CD C2 D2 E7 AD FD 01 A8 EB B2 F0 AC A7 FB 97 34 00 03 FF E6 E6 8D A6 9F DC 85 B8 01 CC D9 B6 E9 B8 99 A4 98 DF 01 06 08 05 C0 E3 A0 CD C2 D2 E7 AD FD 01 A8 EB B2 F0 AC A7 FB 97 34 00 C5 F6 FE DD 05 C0 9E 8F C1 01
Received: DOWNLOAD CHANGESET(server_version=21, client_version=0, origin_timestamp=119442393401, origin_file_ident=2, original_changeset_size=317, changeset_size=317)
Changeset: 3F 00 09 52 65 61 6C 6D 46 69 6C 65 3F 01 09 72 65 61 6C 6D 54 79 70 65 3F 02 09 73 79 6E 63 4C 61 62 65 6C 3F 03 04 55 73 65 72 3F 04 05 6F 77 6E 65 72 3F 05 09 63 72 65 61 74 65 64 41 74 00 00 04 D6 CB E6 D1 80 E9 B3 F3 CD 01 99 82 B2 C2 A8 95 C7 F2 15 02 DC 00 2F 64 65 66 61 75 6C 74 2F 5F 5F 70 61 72 74 69 61 6C 2F 35 38 37 65 37 33 38 30 38 36 30 34 39 37 66 37 35 32 37 38 65 30 32 39 64 35 37 33 39 37 63 39 2F 31 61 38 64 30 31 32 30 30 65 36 64 31 38 35 63 31 64 66 62 31 38 37 64 66 64 31 61 31 39 62 36 65 64 62 36 33 35 34 62 06 02 01 D6 CB E6 D1 80 E9 B3 F3 CD 01 99 82 B2 C2 A8 95 C7 F2 15 00 07 70 61 72 74 69 61 6C 06 02 02 D6 CB E6 D1 80 E9 B3 F3 CD 01 99 82 B2 C2 A8 95 C7 F2 15 00 07 64 65 66 61 75 6C 74 06 0C 04 D6 CB E6 D1 80 E9 B3 F3 CD 01 99 82 B2 C2 A8 95 C7 F2 15 00 03 CA F1 CD DC 8C BF 9C DD 05 8F FD 81 EC E5 E0 A8 8C 3F 06 08 05 D6 CB E6 D1 80 E9 B3 F3 CD 01 99 82 B2 C2 A8 95 C7 F2 15 00 D9 B3 8C DE 05 C0 8C 9B BF 01
Connection[1]: Session[1]: Received: DOWNLOAD(download_server_version=21, download_client_version=0, latest_server_version=21, latest_server_version_salt=7217337837575967989, upload_client_version=0, upload_server_version=0, downloadable_bytes=4920, num_changesets=21, ...)
Using already open Realm file: Path\realm-object-server\listener\realms.realm
I'm developing a BitTorrent client and I'm having trouble getting answers to my piece requests.
To debug, I followed a conversation between uTorrent and transmission using Wireshark and tried to imitate same conversation in my client. But it still doesn't work.
Below is an example conversation happening between my client and transmission. (my client also using -TR--- prefixed peer id, this is only for testing purposes and I'll change this)
Indented messages are coming from transmission, others are messages my client send.
Note that this conversation is not exactly same as how uTorrent and transmission would talk, because my client does not support fast extension yet. (BEP 6)
(Output is taken from Wireshark, lines starting with -- are my comments)
00000000 13 42 69 74 54 6f 72 72 65 6e 74 20 70 72 6f 74 .BitTorr ent prot
00000010 6f 63 6f 6c 00 00 00 00 00 10 00 00 f8 9e 0d fd ocol.... ........
00000020 9c fc a8 52 d9 7a d6 af a4 4d 8f 73 ce 70 b6 36 ...R.z.. .M.s.p.6
00000030 2d 54 52 32 38 34 30 2d 36 68 61 67 76 30 73 70 -TR2840- 6hagv0sp
00000040 34 67 37 6b 4g7k
-- ^ my handshake to transmission
00000000 13 42 69 74 54 6f 72 72 65 6e 74 20 70 72 6f 74 .BitTorr ent prot
00000010 6f 63 6f 6c 00 00 00 00 00 10 00 04 f8 9e 0d fd ocol.... ........
00000020 9c fc a8 52 d9 7a d6 af a4 4d 8f 73 ce 70 b6 36 ...R.z.. .M.s.p.6
00000030 2d 54 52 32 38 34 30 2d 72 73 35 68 71 67 32 68 -TR2840- rs5hqg2h
00000040 6e 70 68 64 nphd
-- ^ transmission answers to my handshake
00000044 00 00 00 1a 14 00 64 31 3a 6d 64 31 31 3a 75 74 ......d1 :md11:ut
00000054 5f 6d 65 74 61 64 61 74 61 69 33 65 65 65 _metadat ai3eee
-- ^ my extended handshake to transmission
00000044 00 00 00 72 14 00 64 31 3a 65 69 31 65 31 3a 6d ...r..d1 :ei1e1:m
00000054 64 31 31 3a 75 74 5f 6d 65 74 61 64 61 74 61 69 d11:ut_m etadatai
00000064 33 65 65 31 33 3a 6d 65 74 61 64 61 74 61 5f 73 3ee13:me tadata_s
00000074 69 7a 65 69 31 34 37 65 31 3a 70 69 35 31 34 31 izei147e 1:pi5141
00000084 33 65 34 3a 72 65 71 71 69 35 31 32 65 31 31 3a 3e4:reqq i512e11:
00000094 75 70 6c 6f 61 64 5f 6f 6e 6c 79 69 31 65 31 3a upload_o nlyi1e1:
000000A4 76 31 37 3a 54 72 61 6e 73 6d 69 73 73 69 6f 6e v17:Tran smission
000000B4 20 32 2e 38 34 65 00 00 00 02 05 80 2.84e.. ....
-- ^ transmission's extended handshake and bitfield
000000C0 00 00 00 01 01 .....
-- ^ transmission unchokes me
00000062 00 00 00 01 02 .....
-- ^ my interested message
00000067 00 00 00 0d 06 00 00 00 00 00 00 00 00 00 00 40 ........ .......#
00000077 00 .
-- ^ piece request
-- no answers ...
00000078 00 00 00 0d 06 00 00 00 00 00 00 00 00 00 00 40 ........ .......#
00000088 00 .
-- ^ piece request again, with 10 seconds interval
-- again no answers...
00000089 00 00 00 0d 06 00 00 00 00 00 00 00 00 00 00 40 ........ .......#
00000099 00 .
-- ^ piece request again, with 10 seconds interval
-- no answers...
Any ideas what am I doing wrong?
Thanks.
EDIT: I updated my client to send unchoke just after sending interested, but I'm still having same problem...
The problem was that I was requesting a piece bigger than the total size of the torrent.
The torrent I was using has 2 files, in total of 12KB. However the piece size of the torrent is 16KB and I was requesting 16KB piece even though the torrent file has only one piece and it's 12 KB in total.
After requesting 12KB instead of 16KB, the problem was solved.