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