protostructs.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef __BARRY_PROTOSTRUCTS_H__
00031 #define __BARRY_PROTOSTRUCTS_H__
00032
00033 #include <stdint.h>
00034 #include <sys/types.h>
00035
00036
00037 namespace Barry { class Data; }
00038
00039 namespace Barry { namespace Protocol {
00040
00041
00042 union SizePacket
00043 {
00044 uint16_t size;
00045 char buffer[4];
00046 } __attribute__ ((packed));
00047
00048
00049
00050
00051
00052 struct GroupLink
00053 {
00054 uint32_t uniqueId;
00055 uint16_t unknown;
00056 } __attribute__ ((packed));
00057
00058 struct MessageAddress
00059 {
00060 uint8_t unknown[8];
00061 uint8_t addr[1];
00062
00063
00064 } __attribute__ ((packed));
00065
00066
00067
00068
00069
00070 struct SMSMetaData
00071 {
00072 uint8_t recv;
00073 uint8_t flags;
00074 #define SMS_FLG_NEW_CONVERSATION 0x20
00075 #define SMS_FLG_SAVED 0x10
00076 #define SMS_FLG_DELETED 0x08
00077 #define SMS_FLG_OPENED 0x01
00078
00079 uint8_t new_flag;
00080 uint16_t zero;
00081 uint32_t status;
00082 #define SMS_STA_RECEIVED 0x000007ff
00083 #define SMS_STA_DRAFT 0x7fffffff
00084
00085 uint32_t error_id;
00086 uint64_t timestamp;
00087 uint64_t service_center_timestamp;
00088 uint8_t dcs;
00089 #define SMS_DCS_7BIT 0x00
00090 #define SMS_DCS_8BIT 0x01
00091 #define SMS_DCS_UCS2 0x02
00092
00093 } __attribute__ ((packed));
00094 #define SMS_METADATA_SIZE (sizeof(::Barry::Protocol::SMSMetaData))
00095
00096
00097
00098
00099
00100
00101 struct CommonField
00102 {
00103 uint16_t size;
00104 uint8_t type;
00105
00106 union CommonFieldData
00107 {
00108
00109 GroupLink link;
00110 MessageAddress addr;
00111 SMSMetaData sms_metadata;
00112 uint64_t timestamp;
00113 uint64_t uint64;
00114 uint32_t uint32;
00115 int32_t min1900;
00116 uint16_t code;
00117 uint8_t raw[1];
00118 int16_t int16;
00119
00120 } __attribute__ ((packed)) u;
00121
00122 } __attribute__ ((packed));
00123 #define COMMON_FIELD_HEADER_SIZE (sizeof(::Barry::Protocol::CommonField) - sizeof(::Barry::Protocol::CommonField::CommonFieldData))
00124 #define COMMON_FIELD_MIN1900_SIZE (sizeof(int32_t))
00125
00126 struct CommandTableField
00127 {
00128 uint8_t size;
00129 uint8_t code;
00130 uint8_t name[1];
00131 } __attribute__ ((packed));
00132 #define COMMAND_FIELD_HEADER_SIZE (sizeof(::Barry::Protocol::CommandTableField) - 1)
00133
00134 struct OldDBDBField
00135 {
00136 uint16_t dbNumber;
00137 uint8_t unknown1;
00138 uint32_t dbSize;
00139
00140 uint16_t dbRecordCount;
00141 uint16_t unknown2;
00142 uint16_t nameSize;
00143 uint8_t name[1];
00144 } __attribute__ ((packed));
00145 #define OLD_DBDB_FIELD_HEADER_SIZE (sizeof(::Barry::Protocol::OldDBDBField) - 1)
00146
00147 struct DBDBField
00148 {
00149 uint16_t dbNumber;
00150 uint8_t unknown1;
00151 uint32_t dbSize;
00152
00153 uint32_t dbRecordCount;
00154 uint16_t unknown2;
00155 uint16_t nameSize;
00156 uint8_t unknown3;
00157 uint8_t name[1];
00158 uint16_t unknown;
00159
00160
00161 } __attribute__ ((packed));
00162 #define DBDB_FIELD_HEADER_SIZE (sizeof(::Barry::Protocol::DBDBField) - 1)
00163
00164 struct RecordStateTableField
00165 {
00166 uint8_t rectype;
00167
00168
00169
00170
00171
00172 uint16_t index;
00173 uint32_t uniqueId;
00174
00175 uint8_t flags;
00176
00177
00178 #define BARRY_RSTF_DIRTY 0x01
00179 uint8_t unknown2[4];
00180 } __attribute__ ((packed));
00181
00182 struct CalendarRecurrenceDataField
00183 {
00184 uint8_t type;
00185 #define CRDF_TYPE_DAY 0x01
00186 #define CRDF_TYPE_MONTH_BY_DATE 0x03
00187 #define CRDF_TYPE_MONTH_BY_DAY 0x04
00188 #define CRDF_TYPE_YEAR_BY_DATE 0x05
00189 #define CRDF_TYPE_YEAR_BY_DAY 0x06
00190 #define CRDF_TYPE_WEEK 0x0c
00191
00192 uint8_t unknown;
00193 uint16_t interval;
00194 uint32_t startTime;
00195 uint32_t endTime;
00196
00197 union Additional
00198 {
00199
00200
00201 struct Day
00202 {
00203 uint8_t day[6];
00204 } __attribute__ ((packed)) day;
00205
00206 struct MonthByDate
00207 {
00208 uint8_t monthDay;
00209
00210 uint8_t blank[5];
00211 } __attribute__ ((packed)) month_by_date;
00212
00213 struct MonthByDay
00214 {
00215 uint8_t weekDay;
00216 uint8_t week;
00217
00218
00219 uint8_t blank[4];
00220 } __attribute__ ((packed)) month_by_day;
00221
00222 struct YearByDate
00223 {
00224 uint8_t monthDay;
00225
00226 uint8_t blank;
00227 uint8_t month;
00228 uint8_t blank_[3];
00229 } __attribute__ ((packed)) year_by_date;
00230
00231 struct YearByDay
00232 {
00233 uint8_t weekDay;
00234 uint8_t week;
00235 uint8_t month;
00236 uint8_t blank[3];
00237 } __attribute__ ((packed)) year_by_day;
00238
00239 struct Week
00240 {
00241 uint8_t days;
00242 #define CRDF_WD_SUN 0x01
00243 #define CRDF_WD_MON 0x02
00244 #define CRDF_WD_TUE 0x04
00245 #define CRDF_WD_WED 0x08
00246 #define CRDF_WD_THU 0x10
00247 #define CRDF_WD_FRI 0x20
00248 #define CRDF_WD_SAT 0x40
00249
00250 uint8_t blank[5];
00251 } __attribute__ ((packed)) week;
00252
00253 } __attribute__ ((packed)) u;
00254
00255 } __attribute__ ((packed));
00256 #define CALENDAR_RECURRENCE_DATA_FIELD_SIZE sizeof(::Barry::Protocol::CalendarRecurrenceDataField)
00257
00258
00259
00260
00261
00262 #define CR_FREEBUSY_FREE 0
00263 #define CR_FREEBUSY_TENTATIVE 1
00264 #define CR_FREEBUSY_BUSY 2
00265 #define CR_FREEBUSY_OUT_OF_OFFICE 3
00266 #define CR_FREEBUSY_RANGE_LOW 0
00267 #define CR_FREEBUSY_RANGE_HIGH 3
00268
00269 #define CR_CLASS_PUBLIC 0
00270 #define CR_CLASS_CONFIDENTIAL 1
00271 #define CR_CLASS_PRIVATE 2
00272 #define CR_CLASS_RANGE_LOW 0
00273 #define CR_CLASS_RANGE_HIGH 2
00274
00275
00276
00277
00278
00279
00280 #define TR_ALARM_DATE 1
00281 #define TR_ALARM_RELATIVE 2
00282 #define TR_ALARM_RANGE_LOW 1
00283 #define TR_ALARM_RANGE_HIGH 2
00284
00285 #define TR_PRIORITY_HIGH 0
00286 #define TR_PRIORITY_NORMAL 1
00287 #define TR_PRIORITY_LOW 2
00288 #define TR_PRIORITY_RANGE_LOW 0
00289 #define TR_PRIORITY_RANGE_HIGH 2
00290
00291 #define TR_STATUS_NOT_STARTED 0
00292 #define TR_STATUS_IN_PROGRESS 1
00293 #define TR_STATUS_COMPLETED 2
00294 #define TR_STATUS_WAITING 3
00295 #define TR_STATUS_DEFERRED 4
00296 #define TR_STATUS_RANGE_LOW 0
00297 #define TR_STATUS_RANGE_HIGH 4
00298
00299
00300
00301
00302
00303 #define CLL_DIRECTION_RECEIVER 0
00304 #define CLL_DIRECTION_EMITTER 1
00305 #define CLL_DIRECTION_FAILED 2
00306 #define CLL_DIRECTION_MISSING 3
00307 #define CLL_DIRECTION_RANGE_LOW 0
00308 #define CLL_DIRECTION_RANGE_HIGH 3
00309
00310 #define CLL_PHONETYPE_UNDEFINED 0
00311 #define CLL_PHONETYPE_OFFICE 1
00312 #define CLL_PHONETYPE_HOME 2
00313 #define CLL_PHONETYPE_MOBILE 3
00314 #define CLL_PHONETYPE_RANGE_LOW 0
00315 #define CLL_PHONETYPE_RANGE_HIGH 3
00316
00317
00318
00319
00320
00321 #define FR_TYPE_SUBTREE 0x00
00322 #define FR_TYPE_DELETED 0x01
00323 #define FR_TYPE_INBOX 0x02
00324 #define FR_TYPE_OUTBOX 0x03
00325 #define FR_TYPE_SENT 0x04
00326 #define FR_TYPE_OTHER 0x05
00327 #define FR_TYPE_DRAFT 0x0a
00328
00329 #define FR_STATUS_ORPHAN 0x50
00330 #define FR_STATUS_UNFILED 0x51
00331 #define FR_STATUS_FILED 0x52
00332
00333
00334
00335
00336
00337 struct PackedField_02
00338 {
00339 uint8_t code;
00340 uint8_t size;
00341 uint8_t type;
00342 uint8_t raw[1];
00343 } __attribute__ ((packed));
00344 #define PACKED_FIELD_02_HEADER_SIZE (sizeof(::Barry::Protocol::PackedField_02) - 1)
00345
00346 struct PackedField_10
00347 {
00348 uint8_t type;
00349 uint8_t size;
00350 uint8_t raw[1];
00351 } __attribute__ ((packed));
00352 #define PACKED_FIELD_10_HEADER_SIZE (sizeof(::Barry::Protocol::PackedField_10) - 1)
00353
00354
00355
00356
00357
00358
00359
00360 struct ServiceBookConfigField
00361 {
00362 uint8_t format;
00363 uint8_t fields[1];
00364 } __attribute__ ((packed));
00365 #define SERVICE_BOOK_CONFIG_FIELD_HEADER_SIZE (sizeof(::Barry::Protocol::ServiceBookConfigField) - 1)
00366
00367
00368
00369
00370
00371 struct DBC_Record
00372 {
00373 uint16_t recordIndex;
00374 uint8_t data[1];
00375 } __attribute__ ((packed));
00376 #define DBC_RECORD_HEADER_SIZE (sizeof(::Barry::Protocol::DBC_Record) - 1)
00377
00378 struct DBC_RecordFlags
00379 {
00380 uint8_t unknown;
00381 uint16_t index;
00382 uint8_t unknown2[5];
00383 } __attribute__ ((packed));
00384 #define DBC_RECORD_FLAGS_SIZE (sizeof(::Barry::Protocol::DBC_RecordFlags))
00385
00386 struct DBC_TaggedUpload
00387 {
00388 uint8_t rectype;
00389
00390
00391
00392
00393
00394 uint32_t uniqueId;
00395 uint8_t unknown2;
00396 uint8_t data[1];
00397 } __attribute__ ((packed));
00398 #define DBC_TAGGED_UPLOAD_HEADER_SIZE (sizeof(::Barry::Protocol::DBC_TaggedUpload) - 1)
00399
00400 struct DBC_IndexedUpload
00401 {
00402 uint8_t unknown;
00403 uint16_t index;
00404 uint8_t data[1];
00405 } __attribute__ ((packed));
00406 #define DBC_INDEXED_UPLOAD_HEADER_SIZE (sizeof(::Barry::Protocol::DBC_IndexedUpload) - 1)
00407
00408 struct PasswordChallenge
00409 {
00410 uint8_t remaining_tries;
00411
00412
00413
00414
00415 uint8_t unknown;
00416
00417
00418
00419 uint16_t param;
00420
00421
00422
00423
00424 union Hash
00425 {
00426 uint32_t seed;
00427 uint8_t hash[20];
00428 } __attribute__ ((packed)) u;
00429
00430 } __attribute__ ((packed));
00431 #define PASSWORD_CHALLENGE_HEADER_SIZE (sizeof(::Barry::Protocol::PasswordChallenge) - sizeof(::Barry::Protocol::PasswordChallenge::Hash))
00432 #define PASSWORD_CHALLENGE_SEED_SIZE (PASSWORD_CHALLENGE_HEADER_SIZE + sizeof(uint32_t))
00433 #define PASSWORD_CHALLENGE_SIZE (sizeof(::Barry::Protocol::PasswordChallenge))
00434
00435 struct AttributeFetch
00436 {
00437 uint16_t object;
00438 uint16_t attribute;
00439 uint8_t raw[1];
00440 } __attribute__ ((packed));
00441 #define ATTRIBUTE_FETCH_COMMAND_SIZE (sizeof(::Barry::Protocol::AttributeFetch) - 1)
00442
00443 struct ModeSelect
00444 {
00445 uint8_t name[16];
00446 struct ResponseBlock
00447 {
00448 uint8_t unknown[20];
00449 } __attribute__ ((packed)) response;
00450 } __attribute__ ((packed));
00451
00452 struct Echo
00453 {
00454 uint64_t ticks;
00455
00456 } __attribute__ ((packed));
00457 #define ECHO_COMMAND_SIZE (sizeof(::Barry::Protocol::Echo))
00458
00459
00460
00461
00462
00463 struct SocketCommand
00464 {
00465 uint16_t socket;
00466 uint8_t sequence;
00467
00468
00469
00470 union PacketData
00471 {
00472
00473 PasswordChallenge password;
00474 AttributeFetch fetch;
00475 ModeSelect mode;
00476 uint8_t raw[1];
00477 Echo echo;
00478
00479 } __attribute__ ((packed)) u;
00480 } __attribute__ ((packed));
00481 #define SOCKET_COMMAND_HEADER_SIZE (sizeof(::Barry::Protocol::SocketCommand) - sizeof(::Barry::Protocol::SocketCommand::PacketData))
00482
00483 struct SequenceCommand
00484 {
00485 uint8_t unknown1;
00486 uint8_t unknown2;
00487 uint8_t unknown3;
00488 uint32_t sequenceId;
00489 } __attribute__ ((packed));
00490
00491 struct DBCommand
00492 {
00493 uint8_t operation;
00494 uint16_t databaseId;
00495
00496 union Parameters
00497 {
00498
00499 DBC_Record record;
00500 DBC_RecordFlags flags;
00501 DBC_TaggedUpload tag_upload;
00502 DBC_IndexedUpload index_upload;
00503 uint8_t raw[1];
00504
00505 } __attribute__ ((packed)) u;
00506 } __attribute__ ((packed));
00507 #define DB_COMMAND_HEADER_SIZE (sizeof(::Barry::Protocol::DBCommand) - sizeof(::Barry::Protocol::DBCommand::Parameters))
00508
00509
00510
00511
00512
00513
00514 struct DBR_OldDBDBRecord
00515 {
00516 uint16_t count;
00517 OldDBDBField field[1];
00518 } __attribute__ ((packed));
00519 #define OLD_DBDB_RECORD_HEADER_SIZE (sizeof(::Barry::Protocol::DBR_OldDBDBRecord) - sizeof(::Barry::Protocol::OldDBDBField))
00520
00521 struct DBR_DBDBRecord
00522 {
00523 uint16_t count;
00524 uint8_t unknown[3];
00525 DBDBField field[1];
00526 } __attribute__ ((packed));
00527 #define DBDB_RECORD_HEADER_SIZE (sizeof(::Barry::Protocol::DBR_DBDBRecord) - sizeof(::Barry::Protocol::DBDBField))
00528
00529
00530
00531
00532
00533
00534
00535 struct DBR_OldTaggedRecord
00536 {
00537 uint8_t rectype;
00538 uint16_t index;
00539 uint32_t uniqueId;
00540 uint8_t unknown2;
00541
00542 union TaggedData
00543 {
00544 CommonField field[1];
00545 } __attribute__ ((packed)) u;
00546 } __attribute__ ((packed));
00547 #define DBR_OLD_TAGGED_RECORD_HEADER_SIZE (sizeof(::Barry::Protocol::DBR_OldTaggedRecord) - sizeof(::Barry::Protocol::DBR_OldTaggedRecord::TaggedData))
00548
00549 struct MessageRecord
00550 {
00551 uint8_t field1;
00552 uint32_t field2;
00553 uint32_t flags;
00554 uint32_t field4;
00555
00556
00557 uint32_t field5;
00558 uint32_t field6;
00559 uint32_t field7;
00560 uint32_t field8;
00561 uint16_t field9;
00562
00563 uint16_t dateReceived;
00564 uint16_t timeReceived;
00565 uint16_t dateDuplicate;
00566 uint16_t timeDuplicate;
00567 uint16_t dateSent;
00568 uint16_t timeSent;
00569
00570 uint16_t priority;
00571 uint32_t field14;
00572 uint32_t field15;
00573 uint16_t field16;
00574 uint32_t field13;
00575 uint16_t messageSize;
00576 uint32_t field18;
00577 uint32_t field19;
00578 uint16_t field20;
00579 uint16_t field21;
00580 uint32_t inReplyTo;
00581 uint32_t field22;
00582 uint16_t field23;
00583
00584 uint32_t folderOne;
00585 uint32_t folderTwo;
00586
00587 uint16_t replyMessageFlags;
00588
00589
00590
00591
00592 uint16_t field27;
00593 uint32_t headerUID;
00594
00595 uint32_t field29;
00596 uint16_t field30;
00597 uint16_t field31;
00598 uint16_t field32;
00599 uint16_t field34;
00600 uint8_t field33;
00601 uint32_t timeBlock;
00602 CommonField field[1];
00603 } __attribute__ ((packed));
00604 #define MESSAGE_RECORD_HEADER_SIZE (sizeof(::Barry::Protocol::MessageRecord) - sizeof(::Barry::Protocol::CommonField))
00605
00606
00607
00608
00609
00610
00611 struct DBResponse
00612 {
00613 uint8_t operation;
00614
00615 union Parameters
00616 {
00617
00618 DBR_OldTaggedRecord tagged;
00619 DBR_OldDBDBRecord old_dbdb;
00620 DBR_DBDBRecord dbdb;
00621
00622 } __attribute__ ((packed)) u;
00623
00624 } __attribute__ ((packed));
00625 #define DB_RESPONSE_HEADER_SIZE (sizeof(::Barry::Protocol::DBResponse) - sizeof(::Barry::Protocol::DBResponse::Parameters))
00626
00627
00628
00629
00630
00631
00632
00633 struct DBAccess
00634 {
00635 uint8_t tableCmd;
00636
00637 union DBData
00638 {
00639 DBCommand command;
00640 DBResponse response;
00641 CommandTableField table[1];
00642 uint8_t return_code;
00643 uint8_t fragment[1];
00644
00645 } __attribute__ ((packed)) u;
00646 } __attribute__ ((packed));
00647 #define SB_DBACCESS_HEADER_SIZE (sizeof(::Barry::Protocol::DBAccess) - sizeof(::Barry::Protocol::DBAccess::DBData))
00648 #define SB_DBACCESS_RETURN_CODE_SIZE (1)
00649
00650
00651
00652
00653
00654
00655 struct JLDirEntry
00656 {
00657 uint16_t unknown;
00658 uint32_t timestamp;
00659 uint16_t filename_size;
00660 uint8_t filename[1];
00661
00662
00663
00664
00665 } __attribute__ ((packed));
00666 #define SB_JLDIRENTRY_HEADER_SIZE (sizeof(::Barry::Protocol::JLDirEntry) - 1)
00667
00668 struct JLCommand
00669 {
00670 uint8_t command;
00671 uint8_t unknown;
00672 uint16_t size;
00673 } __attribute__ ((packed));
00674 #define SB_JLCOMMAND_HEADER_SIZE (sizeof(::Barry::Protocol::JLCommand))
00675
00676 struct JLResponse
00677 {
00678 uint8_t command;
00679 uint8_t unknown;
00680 uint16_t expect;
00681 } __attribute__ ((packed));
00682 #define SB_JLRESPONSE_HEADER_SIZE (sizeof(::Barry::Protocol::JLResponse))
00683
00684 struct JLScreenInfo
00685 {
00686 uint16_t unknown1;
00687 uint16_t unknown2;
00688 uint16_t unknown3;
00689 uint16_t width;
00690 uint16_t height;
00691 uint16_t unknown4;
00692 uint16_t unknown5;
00693 uint16_t unknown6;
00694 } __attribute__ ((packed));
00695 #define SB_JLSCREENINFO_SIZE (sizeof(::Barry::Protocol::JLScreenInfo))
00696
00697 struct JLEventlogEntry
00698 {
00699 uint16_t size;
00700
00701
00702 } __attribute__ ((packed));
00703 #define SB_JLEVENTLOG_ENTRY_HEADER_SIZE (sizeof(::Barry::Protocol::JLEventlogEntry))
00704
00705 struct JLDeviceInfo
00706 {
00707 uint32_t hardware_id;
00708 uint32_t pin;
00709 uint32_t os_version;
00710 uint32_t vm_version;
00711 uint32_t radio_id;
00712 uint32_t vendor_id;
00713 uint32_t active_wafs;
00714
00715
00716
00717 } __attribute__ ((packed));
00718 #define SB_JLDEVICEINFO_SIZE (sizeof(::Barry::Protocol::JLDeviceInfo))
00719
00720 struct JLPacket
00721 {
00722 uint16_t socket;
00723 uint16_t size;
00724
00725 union PacketData
00726 {
00727 JLCommand command;
00728 JLResponse response;
00729 JLScreenInfo screeninfo;
00730 JLEventlogEntry logentry;
00731 JLDeviceInfo devinfo;
00732 uint8_t raw[1];
00733 char filename[1];
00734 uint32_t cod_size;
00735 uint32_t timestamp;
00736 uint16_t id;
00737 } __attribute__ ((packed)) u;
00738
00739 } __attribute__ ((packed));
00740 #define SB_JLPACKET_HEADER_SIZE (sizeof(::Barry::Protocol::JLPacket) - sizeof(::Barry::Protocol::JLPacket::PacketData))
00741
00742
00743
00744
00745
00746 namespace JDWP {
00747
00748
00749
00750
00751 struct PacketEventRequestSet {
00752 uint8_t eventKind;
00753 uint8_t suspendPolicy;
00754 uint32_t modifiers;
00755 } __attribute__ ((packed));
00756
00757
00758 struct PacketEventRequest {
00759 union PacketEventRequestData {
00760 PacketEventRequestSet set;
00761 } __attribute__ ((packed)) u;
00762 } __attribute__ ((packed));
00763
00764
00765 struct PacketCommand {
00766 uint8_t commandset;
00767 uint8_t command;
00768
00769 union PacketCommandData {
00770 PacketEventRequest eventRequest;
00771 } __attribute__ ((packed)) u;
00772 } __attribute__ ((packed));
00773 #define JDWP_COMMAND_HEADER_SIZE (sizeof(::Barry::Protocol::JDWP::PacketCommand))
00774
00775
00776
00777
00778
00779 struct PacketVirtualMachineIDSizes {
00780 uint32_t fieldIDSize;
00781 uint32_t methodIDSize;
00782 uint32_t objectIDSize;
00783 uint32_t referenceTypeIDSize;
00784 uint32_t frameIDSize;
00785 } __attribute__ ((packed));
00786
00787 #define JDWP_PACKETVIRTUALMACHINEIDSIZES_DATA_SIZE sizeof(::Barry::Protocol::JDWP::PacketVirtualMachineIDSizes)
00788
00789
00790 struct PacketVirtualMachine {
00791 union PacketVirtualMachineData {
00792 PacketVirtualMachineIDSizes IDSizes;
00793 } __attribute__ ((packed)) u;
00794 } __attribute__ ((packed));
00795
00796
00797 struct PacketResponse {
00798 uint16_t errorcode;
00799
00800 union PacketResponseData {
00801 PacketVirtualMachine virtualMachine;
00802 uint32_t value;
00803 uint8_t raw[1];
00804 } __attribute__ ((packed)) u;
00805 } __attribute__ ((packed));
00806 #define JDWP_RESPONSE_HEADER_SIZE (sizeof(::Barry::Protocol::JDWP::PacketResponse) - sizeof(::Barry::Protocol::JDWP::PacketResponse::PacketResponseData))
00807
00808
00809
00810
00811
00812 struct Packet {
00813 uint32_t length;
00814 uint32_t id;
00815 uint8_t flags;
00816
00817 union PacketType {
00818 PacketCommand command;
00819 PacketResponse response;
00820 } __attribute__ ((packed)) u;
00821 } __attribute__ ((packed));
00822 #define JDWP_PACKET_HEADER_SIZE (sizeof(::Barry::Protocol::JDWP::Packet) - sizeof(::Barry::Protocol::JDWP::Packet::PacketType))
00823
00824
00825 #define MAKE_JDWPPACKET(var, data) const ::Barry::Protocol::JDWP::Packet *var = (const ::Barry::Protocol::JDWP::Packet *) (data).GetData()
00826 #define MAKE_JDWPPACKETPTR_BUF(var, ptr) ::Barry::Protocol::JDWP::Packet *var = (::Barry::Protocol::JDWP::Packet *)ptr
00827
00828
00829 }
00830
00831 struct JDWField {
00832 uint32_t size;
00833
00834 union JDWFieldData {
00835 uint8_t raw[1];
00836 } __attribute__ ((packed)) u;
00837 } __attribute__ ((packed));
00838 #define JDWP_FIELD_HEADER_SIZE (sizeof(::Barry::Protocol::JDWField) - sizeof(::Barry::Protocol::JDWField::JDWFieldData))
00839
00840 struct JVMCommand
00841 {
00842 uint16_t size;
00843 uint8_t command;
00844 uint8_t raw[1];
00845 } __attribute__ ((packed));
00846 #define SB_JVMCOMMAND_HEADER_SIZE (sizeof(::Barry::Protocol::JVMCommand))
00847
00848 struct JVMResponse
00849 {
00850 uint8_t command;
00851 uint8_t unknown;
00852 uint16_t expect;
00853 } __attribute__ ((packed));
00854 #define SB_JVMRESPONSE_HEADER_SIZE (sizeof(::Barry::Protocol::JVMResponse))
00855
00856 struct JVMModulesList
00857 {
00858 uint32_t nbr;
00859
00860
00861 } __attribute__ ((packed));
00862 #define SB_JVMMODULES_LIST_HEADER_SIZE (sizeof(::Barry::Protocol::JVMModulesList))
00863
00864 struct JVMModulesEntry
00865 {
00866 uint32_t id;
00867 uint32_t uniqueId;
00868 uint16_t sizename;
00869
00870
00871 } __attribute__ ((packed));
00872 #define SB_JVMMODULES_ENTRY_HEADER_SIZE (sizeof(::Barry::Protocol::JVMModulesEntry))
00873
00874 struct JVMThreadsList
00875 {
00876 uint32_t nbr;
00877
00878
00879 } __attribute__ ((packed));
00880 #define SB_JVMTHREADS_LIST_HEADER_SIZE (sizeof(::Barry::Protocol::JVMThreadsList))
00881
00882 struct JVMUnknown01
00883 {
00884 uint8_t byte;
00885 uint32_t address;
00886 } __attribute__ ((packed));
00887 #define SB_JVMUNKNOWN01_HEADER_SIZE (sizeof(::Barry::Protocol::JVMUnknown01))
00888
00889 struct JVMUnknown02
00890 {
00891 uint32_t address1;
00892 uint32_t address2;
00893 } __attribute__ ((packed));
00894 #define SB_JVMUNKNOWN02_HEADER_SIZE (sizeof(::Barry::Protocol::JVMUnknown02))
00895
00896 struct JVMPacket
00897 {
00898 uint16_t socket;
00899 uint16_t size;
00900
00901 union PacketData
00902 {
00903 JVMCommand command;
00904 JVMResponse response;
00905 JVMModulesList moduleslist;
00906 JVMThreadsList threadslist;
00907 JVMUnknown01 unknown01;
00908 JVMUnknown02 unknown02;
00909 uint32_t address;
00910 uint16_t expect;
00911 uint16_t msglength;
00912 uint16_t value;
00913 uint8_t status;
00914 uint8_t raw[1];
00915 } __attribute__ ((packed)) u;
00916
00917 } __attribute__ ((packed));
00918 #define SB_JVMPACKET_HEADER_SIZE (sizeof(::Barry::Protocol::JVMPacket) - sizeof(::Barry::Protocol::JVMPacket::PacketData))
00919
00920
00921
00922
00923
00924 struct Packet
00925 {
00926 uint16_t socket;
00927 uint16_t size;
00928 uint8_t command;
00929
00930 union PacketData
00931 {
00932
00933 SocketCommand socket;
00934 SequenceCommand sequence;
00935 DBAccess db;
00936 uint8_t raw[1];
00937
00938 } __attribute__ ((packed)) u;
00939 } __attribute__ ((packed));
00940 #define SB_PACKET_HEADER_SIZE (sizeof(::Barry::Protocol::Packet) - sizeof(::Barry::Protocol::Packet::PacketData))
00941
00942
00943 #define MIN_PACKET_SIZE 5
00944 #define MIN_PACKET_DATA_SIZE 4
00945
00946
00947
00948 #define MAX_PACKET_SIZE 0x400 // anything beyond this needs to be fragmented
00949 #define MAX_PACKET_DATA_SIZE 0x7FC // for data packet (JavaLoader)
00950
00951
00952
00953
00954
00955
00956 #define SB_PACKET_DBACCESS_HEADER_SIZE (SB_PACKET_HEADER_SIZE + SB_DBACCESS_HEADER_SIZE)
00957 #define SB_FRAG_HEADER_SIZE SB_PACKET_DBACCESS_HEADER_SIZE
00958
00959 #define SB_PACKET_COMMAND_HEADER_SIZE (SB_PACKET_DBACCESS_HEADER_SIZE + DB_COMMAND_HEADER_SIZE)
00960 #define SB_PACKET_RESPONSE_HEADER_SIZE (SB_PACKET_DBACCESS_HEADER_SIZE + DB_RESPONSE_HEADER_SIZE)
00961
00962 #define SB_PACKET_DBDB_HEADER_SIZE (SB_PACKET_RESPONSE_HEADER_SIZE + DBDB_RECORD_HEADER_SIZE)
00963 #define SB_PACKET_OLD_DBDB_HEADER_SIZE (SB_PACKET_RESPONSE_HEADER_SIZE + OLD_DBDB_RECORD_HEADER_SIZE)
00964
00965 #define SB_PACKET_UPLOAD_HEADER_SIZE (SB_PACKET_DBACCESS_HEADER_SIZE + UPLOAD_HEADER_SIZE)
00966
00967 #define SB_SEQUENCE_PACKET_SIZE (SB_PACKET_HEADER_SIZE + sizeof(::Barry::Protocol::SequenceCommand))
00968 #define SB_SOCKET_PACKET_HEADER_SIZE (SB_PACKET_HEADER_SIZE + SOCKET_COMMAND_HEADER_SIZE)
00969 #define SB_MODE_PACKET_COMMAND_SIZE (SB_SOCKET_PACKET_HEADER_SIZE + sizeof(::Barry::Protocol::ModeSelect) - sizeof(::Barry::Protocol::ModeSelect::ResponseBlock))
00970 #define SB_MODE_PACKET_RESPONSE_SIZE (SB_SOCKET_PACKET_HEADER_SIZE + sizeof(::Barry::Protocol::ModeSelect))
00971
00972
00973
00974 #define COMMAND(data) (((const ::Barry::Protocol::Packet *)data.GetData())->command)
00975 #define IS_COMMAND(data, cmd) (COMMAND(data) == cmd)
00976 #define MAKE_PACKET(var, data) const ::Barry::Protocol::Packet *var = (const ::Barry::Protocol::Packet *) (data).GetData()
00977 #define MAKE_JLPACKET(var, data) const ::Barry::Protocol::JLPacket *var = (const ::Barry::Protocol::JLPacket *) (data).GetData()
00978 #define MAKE_JVMPACKET(var, data) const ::Barry::Protocol::JVMPacket *var = (const ::Barry::Protocol::JVMPacket *) (data).GetData()
00979 #define MAKE_PACKETPTR_BUF(var, ptr) ::Barry::Protocol::Packet *var = (::Barry::Protocol::Packet *)ptr
00980 #define MAKE_JLPACKETPTR_BUF(var, ptr) ::Barry::Protocol::JLPacket *var = (::Barry::Protocol::JLPacket *)ptr
00981 #define MAKE_JVMPACKETPTR_BUF(var, ptr) ::Barry::Protocol::JVMPacket *var = (::Barry::Protocol::JVMPacket *)ptr
00982 #define MAKE_RECORD(type,var,data,off) type *var = (type *) ((data).GetData() + (off))
00983 #define MAKE_RECORD_PTR(type,var,data,off) type *var = (type *) ((data) + (off))
00984
00985
00986
00987
00988
00989
00990
00991
00992
00993
00994
00995
00996
00997 void CheckSize(const Barry::Data &packet, size_t requiredsize);
00998 unsigned int GetSize(const Barry::Data &packet);
00999
01000 }}
01001
01002 #endif
01003