Notes on the Davinci Sync protocol Michael Hope, michaelh@earthling.net, v990802 Notes: ------ Some of this information is personal and has been deleted from the dumps. The checksum field is some kind of CRC - pitty. See the ACK frame, and the differences between the get-categories(pc) and get-categories-check(pc). All frames have a frame start / frame end markers - C0 for the start of frame and C1 for the end of frame. These are probably escaped al'a HDLC but I don't have any proof. Look around the checksum fields as they're most likely to have C0/C1 in them. The type field seems to be compressed if the first byte is not zero. Heh. What a silly statement - there's no advantage in compressing it and using zero to start an uncompressed type. But the type length does vary - it must be by some other means. The length of the remainder of the frame is next. Most of the frames are made up of many fields. Every field starts with the length of the data in the field, and is followed by the real data. The checksum is always at the end. The dump at the end is a minimal length dump - when the dav is already synced to the pc. This suggests that a checksum is done over the whole category to lower what has to be checked. All dumps were generated by my 'pds' program. It's probably going to be alot easier to design another protocol that runs as an app on the dav - but you still need to be able to upload the app first off. So I'm going to concentrate on breaking that part first. initial(pc): ----------- Initial frame, sent from the PC every 1/2 second: 1: C0 C0 C0 C0 C0 C0 C0 C0 00 00 00 1E 00 18 xx xx ..............xx 1: xx xx xx 2D 4F 45 4D 2D xx xx xx xx xx xx xx 2D xxx-OEM-xxxxxxx- 1: xx xx xx xx xx 00 0A 46 C1 xxxxx..F. sync: c0 type: 00 00 length: 00 1e id: 00 18 ('xxxxx-OEM-xxxxxxx-xxxxx\0') check: 0a 46 frame end: c1 Note that this doesn't fit the pattern of the later frames. I don't know why. The OEM number is used as a magic number. initial-response(dav): ---------------------- Reply to the initial frame from the dav. Launches the sync.exe program 2: C0 01 00 2C 00 00 00 00 03 31 2E 30 02 31 31 17 ...,.....1.0.11. 2: xx xx xx xx xx 2D 4F 45 4D 2D xx xx xx xx xx xx xxxxx-OEM-xxxxxx 2: xx 2D xx xx xx xx xx 05 79 61 68 6F 6F 2E 5C C1 (timeout)x-xxxxx.yahoo.\. sync: c0 type: 01 length: 00 2c ba: 00 bb: 00 bb: 00 bc: 00 version: 03, ('1.0') user: 02, ('11') id: 17, ('xxxxx-OEM-xxxxxxx-xxxxx') key_1: 05, ('yahoo') check: 2E 5C Frame end: C1 get-categories(pc) ------------------ Gets a list of categories in a given database select- 1: C0 C0 C0 C0 C0 C0 C0 C0 00 04 00 14 25 0E 54 6F ............%.To 1: 64 6F 20 44 61 74 61 62 61 73 65 00 01 A0 C1 C0 do Database..... 8x sync type: 00 04 length: 00 14 a: 25 name: 0E ('Todo Database\0') check: 01 a0 frame end: c1 1: C0 C0 C0 C0 C0 C0 C0 C0 00 01 00 1A 25 14 50 68 ............%.Ph 1: 6F 6E 65 20 42 6F 6F 6B 20 44 61 74 61 62 61 73 one Book Databas 1: 65 00 D5 D2 C1 e.... 8x sync type: 00 01 length: 00 1A a: 25 name: 14 ('Phone Book Database\0') check: d5 d2 frame end: c1 1: C0 C0 C0 C0 C0 C0 C0 C0 00 01 00 1A 25 14 50 68 ............%.Ph 1: 6F 6E 65 20 42 6F 6F 6B 20 44 61 74 61 62 61 73 one Book Databas 1: 65 00 D5 D2 C1 e.... 8x sync type: 00 01 length: 00 1A a: 25 b: 14 ('Phone Book Database\0') check: d5 d2 frame end: c1 get-categories-check(pc) ------------------------ Get the category checksums for each category in a database. 1: C0 C0 C0 C0 C0 C0 C0 C0 00 02 00 1B 07 14 50 68 ..............Ph 1: 6F 6E 65 20 42 6F 6F 6B 20 44 61 74 61 62 61 73 one Book Databas 1: 65 00 33 95 DD C1 e.3... 8x sync type: 00 02 length: 00 1B a: 07 name: 14 ('Phone Book Database\0') b: 33 check: 95 dd frame end: c1 1: C0 C0 C0 C0 C0 C0 C0 C0 00 05 00 15 07 0E 54 6F ..............To 1: 64 6F 20 44 61 74 61 62 61 73 65 00 61 B3 85 C1 do Database.a... 8x sync type: 00 05 length: 00 15 a: 07 b: 0e ('Todo Database\0') c: 61 check: b3 85 frame end: c1 1: C0 C0 C0 C0 C0 C0 C0 C0 00 07 00 18 07 11 50 6C ..............Pl 1: 61 6E 6E 65 72 20 44 61 74 61 62 61 73 65 00 73 anner Database.s 1: AF EB C1 C0 C0 C0 C0 C0 C0 C0 C0 00 ............ 8x sync type: 00 07 length: 00 18 a: 07 b: 11 ('Planner Database\0') c: 73 check: af eb frame end: c1 get-categories-response(dav) ---------------------------- Response from the dav to a get-categories(pc) 1x sync type: 01 length: 0147 a: 00 00 00 00 Followed by category names aligned on 16 byte boundaries starting at +7 Names are null terminated. Max of 20 cats. check: 16 26 frame end: c1 2: C0 01 01 47 00 00 00 00 42 69 72 74 68 64 61 79 ..G.... Birthday 2: 00 00 75 73 74 6F 6D 20 53 6F 63 69 61 6C 20 53 ..ustom Social S 2: 65 63 75 72 69 74 79 00 50 61 73 73 70 6F 72 74 ecurity.Passport 2: 00 43 75 73 74 6F 6D 20 44 72 69 76 65 72 73 20 .Custom Drivers 2: 4C 69 63 00 6E 65 20 42 42 75 73 69 6E 65 73 73 Lic.ne BBusiness 2: 00 50 65 72 73 6F 6E 61 50 65 72 73 6F 6E 61 6C .PersonaPersonal 2: 00 43 61 74 31 00 43 61 46 61 6D 69 6C 79 00 74 .Cat1.CaFamily.t 2: 32 00 43 61 74 33 00 43 46 72 69 65 6E 64 73 00 2.Cat3.CFriends. 2: 33 00 43 61 74 34 00 41 53 74 61 72 66 69 73 68 3.Cat4.AStarfish 2: 00 00 41 6C 6C 00 55 6E 00 61 74 34 00 41 6C 6C ..All.Un.at4.All 2: 00 55 6E 66 69 6C 65 64 00 FF FF FF FF FF FF FF .Unfiled........ 2: FF FF FF FF FF FF FF FF 00 FF FF FF FF FF FF FF ................ 2: FF FF FF FF FF FF FF FF 00 FF FF FF FF FF FF FF ................ 2: FF FF FF FF FF FF FF FF 00 FF FF FF FF FF FF FF ................ 2: FF FF FF FF FF FF FF FF 00 FF FF FF FF FF FF FF ................ 2: FF FF FF FF FF FF FF FF 00 FF FF FF FF FF FF FF ................ 2: FF FF FF FF FF FF FF FF 00 FF FF FF FF FF FF FF ................ 2: FF FF FF FF FF FF FF FF 00 FF FF FF FF FF FF FF ................ 2: FF FF FF FF FF FF FF FF 00 FF FF FF FF FF FF FF ................ 2: FF FF FF FF FF FF FF FF 55 6E 66 69 6C 65 64 00 ........Unfiled. 2: 00 01 02 03 04 05 06 07 16 26 C1 (timeout) .........&. ack(dav) -------- An acknowledge response. Happens very often. 2: C0 01 00 07 00 00 00 00 79 23 C1 ........y#. 2: C0 01 00 07 00 00 00 00 79 23 C1 ........y#. ACK? type: 01 length: 00 07 (wrong) check: 79 23 frame end: c1 Partial dump of the remainder. Some of the header stuff is missing as I accidently cut it out and put it above :) ---------------------------------------------------------------------- 2: C0 01 01 47 00 00 00 00 42 69 72 74 68 64 61 79 ..G.... Birthday 2: 00 00 75 73 74 6F 6D 20 53 6F 63 69 61 6C 20 53 ..ustom Social S 2: 65 63 75 72 69 74 79 00 50 61 73 73 70 6F 72 74 ecurity.Passport 2: 00 43 75 73 74 6F 6D 20 44 72 69 76 65 72 73 20 .Custom Drivers 2: 4C 69 63 00 6E 65 20 42 42 75 73 69 6E 65 73 73 Lic.ne BBusiness 2: 00 50 65 72 73 6F 6E 61 50 65 72 73 6F 6E 61 6C .PersonaPersonal 2: 00 43 61 74 31 00 43 61 46 61 6D 69 6C 79 00 74 .Cat1.CaFamily.t 2: 32 00 43 61 74 33 00 43 46 72 69 65 6E 64 73 00 2.Cat3.CFriends. 2: 33 00 43 61 74 34 00 41 xx xx xx xx xx xx xx xx 3.Cat4.Axxxxxxxx 2: 00 00 41 6C 6C 00 55 6E 00 61 74 34 00 41 6C 6C ..All.Un.at4.All 2: 00 55 6E 66 69 6C 65 64 00 FF FF FF FF FF FF FF .Unfiled........ 2: FF FF FF FF FF FF FF FF 00 FF FF FF FF FF FF FF ................ 2: FF FF FF FF FF FF FF FF 00 FF FF FF FF FF FF FF ................ 2: FF FF FF FF FF FF FF FF 00 FF FF FF FF FF FF FF ................ 2: FF FF FF FF FF FF FF FF 00 FF FF FF FF FF FF FF ................ 2: FF FF FF FF FF FF FF FF 00 FF FF FF FF FF FF FF ................ 2: FF FF FF FF FF FF FF FF 00 FF FF FF FF FF FF FF ................ 2: FF FF FF FF FF FF FF FF 00 FF FF FF FF FF FF FF ................ 2: FF FF FF FF FF FF FF FF 00 FF FF FF FF FF FF FF ................ 2: FF FF FF FF FF FF FF FF 55 6E 66 69 6C 65 64 00 ........Unfiled. 2: 00 01 02 03 04 05 06 07 16 26 C1 (timeout) .........&. 1: C0 C0 C0 C0 C0 C0 C0 C0 00 02 00 1B 07 14 50 68 ..............Ph 1: 6F 6E 65 20 42 6F 6F 6B 20 44 61 74 61 62 61 73 one Book Databas 1: 65 00 33 95 DD C1 e.3... 2: C0 01 00 79 00 00 00 00 00 00 00 02 00 00 00 00 ...y............ 2: 00 03 00 00 00 00 00 05 00 00 00 00 00 06 00 00 ................ 2: 00 00 00 07 00 00 00 00 00 08 00 00 00 00 00 09 ................ 2: 00 00 00 00 00 0A 00 00 00 00 00 0B 20 20 00 00 ............ .. 2: 00 0C 00 00 00 00 00 0D 00 00 00 00 00 0E 00 00 ................ 2: 00 00 00 0F 00 00 00 00 00 10 00 00 00 00 00 11 ................ 2: 00 00 00 00 00 12 00 00 00 00 00 13 00 00 00 00 ................ 2: 00 14 00 00 00 00 00 15 00 00 08 C9 C1 ............. 1: C0 C0 C0 C0 C0 C0 C0 C0 00 03 00 05 08 4A 18 C1 .............J.. 1: C0 C0 C0 C0 C0 C0 C0 C0 00 03 00 05 08 4A 18 C1 .............J.. 2: C0 01 00 07 00 00 00 00 79 23 C1 C0 01 00 07 00 ........y#...... 2: 00 00 00 79 23 C1 ...y#. 1: C0 C0 C0 C0 C0 C0 C0 C0 00 04 00 14 25 0E 54 6F ............%.To 1: 64 6F 20 44 61 74 61 62 61 73 65 00 01 A0 C1 C0 do Database..... 1: C0 C0 C0 C0 C0 C0 C0 00 04 00 14 25 0E 54 6F 64 ...........%.Tod 1: 6F 20 44 61 74 61 62 61 73 65 00 01 A0 C1 o Database.... 2: C0 01 01 07 00 00 00 00 42 75 73 69 6E 65 73 73 ........Business 2: 00 00 00 00 00 00 00 00 50 65 72 73 6F 6E 61 6C ........Personal 2: 00 00 00 00 00 00 00 00 42 69 67 00 00 00 00 00 ........Big..... 2: 00 00 00 00 00 00 00 00 43 75 62 65 00 00 00 00 ........Cube.... 2: 00 00 00 00 00 00 00 00 49 6D 70 6F 72 74 61 6E ........Importan 2: 74 00 00 00 00 00 00 00 42 69 6C 6C 73 00 00 00 t.......Bills... 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2: 00 00 00 00 00 00 00 00 55 6E 66 69 6C 65 64 00 ........Unfiled. 2: 00 00 00 00 00 00 00 00 67 D4 C1 C0 01 01 07 00 ........g....... 2: 00 00 00 42 75 73 69 6E 65 73 73 00 00 00 00 00 ...Business..... 2: 00 00 00 50 65 72 73 6F 6E 61 6C 00 00 00 00 00 ...Personal..... 2: 00 00 00 42 69 67 00 00 00 00 00 00 00 00 00 00 ...Big.......... 2: 00 00 00 43 75 62 65 00 00 00 00 00 00 00 00 00 ...Cube......... 2: 00 00 00 49 6D 70 6F 72 74 61 6E 74 00 00 00 00 ...Important.... 2: 00 00 00 42 69 6C 6C 73 00 00 00 00 00 00 00 00 ...Bills........ 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2: 00 00 00 55 6E 66 69 6C 65 64 00 00 00 00 00 00 ...Unfiled...... 2: 00 00 00 67 D4 C1 (timeout) ...g.. 1: C0 C0 C0 C0 C0 C0 C0 C0 00 05 00 15 07 0E 54 6F ..............To 1: 64 6F 20 44 61 74 61 62 61 73 65 00 61 B3 85 C1 do Database.a... 1: C0 C0 C0 C0 C0 C0 C0 C0 00 05 00 15 07 0E 54 6F ..............To 1: 64 6F 20 44 61 74 61 62 61 73 65 00 61 B3 85 C1 do Database.a... 2: C0 01 00 F7 00 00 00 00 00 00 00 02 00 00 00 00 ................ 2: 00 03 00 00 00 00 00 04 00 00 00 00 00 05 00 00 ................ 2: 00 00 00 06 00 00 00 00 00 07 00 00 00 00 00 08 ................ 2: 00 00 00 00 00 09 00 00 00 00 00 0A 00 00 00 00 ................ 2: 00 0B 00 00 00 00 00 0C 00 00 00 00 00 0D 00 00 ................ 2: 00 00 00 0E 00 00 00 00 00 0F 00 00 00 00 00 10 ................ 2: 00 00 00 00 00 11 00 00 00 00 00 12 00 00 00 00 ................ 2: 00 13 00 00 00 00 00 14 00 00 00 00 00 15 00 00 ................ 2: 00 00 00 16 00 00 00 00 00 17 00 00 00 00 00 18 ................ 2: 00 00 00 00 00 19 00 00 00 00 00 1A 00 00 00 00 ................ 2: 00 1B 00 00 00 00 00 1C 00 00 00 00 00 1D 00 00 ................ 2: 00 00 00 1E 00 00 00 00 00 1F 00 00 00 00 00 20 ............... 2: 00 00 00 00 00 21 00 00 00 00 00 21 00 00 00 00 .....!.....!.... 2: 00 22 00 00 00 00 00 23 00 00 00 00 00 24 00 00 .".....#.....$.. 2: 00 00 00 25 00 00 00 00 00 26 00 00 00 00 00 27 ...%.....&.....' 2: 00 00 00 00 00 28 00 00 CB 7D E0 C1 C0 01 00 F7 .....(...}...... 2: 00 00 00 00 00 00 00 02 00 00 00 00 00 03 00 00 ................ 2: 00 00 00 04 00 00 00 00 00 05 00 00 00 00 00 06 ................ 2: 00 00 00 00 00 07 00 00 00 00 00 08 00 00 00 00 ................ 2: 00 09 00 00 00 00 00 0A 00 00 00 00 00 0B 00 00 ................ 2: 00 00 00 0C 00 00 00 00 00 0D 00 00 00 00 00 0E ................ 2: 00 00 00 00 00 0F 00 00 00 00 00 10 00 00 00 00 ................ 2: 00 11 00 00 00 00 00 12 00 00 00 00 00 13 00 00 ................ 2: 00 00 00 14 00 00 00 00 00 15 00 00 00 00 00 16 ................ 2: 00 00 00 00 00 17 00 00 00 00 00 18 00 00 00 00 ................ 2: 00 19 00 00 00 00 00 1A 00 00 00 00 00 1B 00 00 ................ 2: 00 00 00 1C 00 00 00 00 00 1D 00 00 00 00 00 1E ................ 2: 00 00 00 00 00 1F 00 00 00 00 00 20 00 00 00 00 ........... .... 2: 00 21 00 00 00 00 00 21 00 00 00 00 00 22 00 00 .!.....!.....".. 2: 00 00 00 23 00 00 00 00 00 24 00 00 00 00 00 25 ...#.....$.....% 2: 00 00 00 00 00 26 00 00 00 00 00 27 00 00 00 00 .....&.....'.... 2: 00 28 00 00 CB 7D E0 C1 .(...}.. 1: C0 C0 C0 C0 C0 C0 C0 C0 00 06 00 05 08 1D 76 C1 ..............v. 2: C0 01 00 07 00 00 00 00 79 23 C1 ........y#. 1: C0 C0 C0 C0 C0 C0 C0 C0 00 06 00 05 08 1D 76 C1 ..............v. 2: C0 01 00 07 00 00 00 00 79 23 C1 ........y#. 1: C0 C0 C0 C0 C0 C0 C0 C0 00 07 00 18 07 11 50 6C ..............Pl 1: 61 6E 6E 65 72 20 44 61 74 61 62 61 73 65 00 73 anner Database.s 1: AF EB C1 C0 C0 C0 C0 C0 C0 C0 C0 00 ............ 2: C0 01 00 97 00 00 00 00 00 00 00 02 00 00 00 00 ................ 2: 00 03 00 00 00 00 00 04 00 00 00 00 00 05 00 00 ................ 2: 00 00 00 06 00 00 00 00 00 07 00 00 00 00 00 08 ................ 2: 00 00 00 00 00 09 00 00 00 00 00 0A 00 00 00 00 ................ 2: 00 0B 00 00 00 00 00 0C 00 00 00 00 00 0D 00 00 ................ 2: 00 00 00 0E 00 00 00 00 00 0F 00 00 00 00 00 10 ................ 2: 00 00 00 00 00 11 00 00 00 00 00 12 00 00 00 00 ................ 2: 00 13 00 00 00 00 00 14 00 00 00 00 00 15 00 00 ................ 2: 00 00 00 16 00 00 00 00 00 17 00 00 00 00 00 18 ................ 2: 00 00 00 00 00 19 00 00 9E A8 C1 ........... 1: 08 00 05 08 5F D8 C1 ...._.. 2: C0 01 00 07 00 00 00 00 79 23 C1 ........y#. 1: C0 C0 C0 C0 C0 C0 C0 C0 00 09 00 14 25 0E 4D 65 ............%.Me 1: 6D 6F 20 44 61 74 61 62 61 73 65 00 97 3A C1 C0 mo Database..:.. 1: C0 C0 C0 C0 C0 C0 C0 00 0A 00 15 07 0E 4D 65 6D .............Mem 1: 6F 20 44 61 74 61 62 61 73 65 00 73 B8 F1 C1 o Database.s... 2: C0 01 01 07 00 00 00 00 42 75 73 69 6E 65 73 73 ........Business 2: 00 00 00 00 00 00 00 00 50 65 72 73 6F 6E 61 6C ........Personal 2: 00 00 00 00 00 00 00 00 43 61 74 31 00 00 00 00 ........Cat1.... 2: 00 00 00 00 00 00 00 00 43 61 74 32 00 00 00 00 ........Cat2.... 2: 00 00 00 00 00 00 00 00 43 61 74 33 00 00 00 00 ........Cat3.... 2: 00 00 00 00 00 00 00 00 43 61 74 34 00 00 00 00 ........Cat4.... 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 2: 00 00 00 00 00 00 00 00 55 6E 66 69 6C 65 64 00 ........Unfiled. 2: 00 00 00 00 00 00 00 00 87 2D C1 C0 01 00 07 00 .........-...... 2: 00 00 00 79 23 C1 ...y#. 1: C0 C0 C0 C0 C0 C0 C0 C0 00 0B 00 07 13 00 00 85 ................ 1: 9C C1 C0 C0 C0 C0 C0 C0 C0 C0 00 ........... 2: C0 01 00 07 00 00 21 04 B6 5F C1 ......!.._. 1: 0B 00 07 13 00 00 85 9C C1 C0 C0 C0 C0 C0 C0 C0 ................ 1: C0 00 0C 00 05 08 B3 AA C1 ......... 2: C0 01 00 07 00 00 21 04 B6 5F C1 C0 01 00 07 00 ......!.._...... 2: 00 00 00 79 23 C1 (timeout) ...y#. 1: C0 C0 C0 C0 C0 C0 C0 C0 00 0D 00 05 01 C9 2B C1 ..............+. 2: C0 01 00 07 00 00 00 00 79 23 C1 ........y#. 1: C0 C0 C0 C0 C0 C0 C0 C0 00 0D 00 05 01 C9 2B C1 ..............+. 2: 1: C0 C0 C0 C0 C0 C0 C0 C0 00 0D 00 05 01 C9 2B (timeout) ..............+