1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
|
/* packet-starteam.c
* Routines for Borland StarTeam packet dissection
*
* metatech <metatech[AT]flashmail.com>
*
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
/* StarTeam in a nutshell
*
* StarTeam is a Software Change & Configuration Management Tool (like CVS)
*/
#include "config.h"
#include <epan/packet.h>
#include <epan/prefs.h>
#include "packet-tcp.h"
void proto_register_starteam(void);
void proto_reg_handoff_starteam(void);
static int proto_starteam;
static int hf_starteam_mdh_session_tag;
static int hf_starteam_mdh_ctimestamp;
static int hf_starteam_mdh_flags;
static int hf_starteam_mdh_keyid;
static int hf_starteam_mdh_reserved;
static int hf_starteam_ph_signature;
static int hf_starteam_ph_packet_size;
static int hf_starteam_ph_data_size;
static int hf_starteam_ph_data_flags;
static int hf_starteam_id_revision_level;
static int hf_starteam_id_client;
static int hf_starteam_id_connect;
static int hf_starteam_id_component;
static int hf_starteam_id_command;
static int hf_starteam_id_command_time;
static int hf_starteam_id_command_userid;
static int hf_starteam_data_data;
static int ett_starteam;
static int ett_starteam_mdh;
static int ett_starteam_ph;
static int ett_starteam_id;
static int ett_starteam_data;
static dissector_handle_t starteam_tcp_handle;
static bool starteam_desegment = true;
#define STARTEAM_MAGIC 0x416C616E /* "Alan" */
#define STARTEAM_SRVR_CMD_GET_SESSION_TAG 1
#define STARTEAM_SRVR_CMD_GET_REQUIRED_ENCRYPTION_LEVEL 2
#define STARTEAM_SRVR_CMD_GET_SERVER_PARAMS 3
#define STARTEAM_SRVR_CMD_SERVER_CONNECT 4
#define STARTEAM_SRVR_CMD_SERVER_RECONNECT 5
#define STARTEAM_SRVR_CMD_BEGIN_LOGIN 10
#define STARTEAM_SRVR_CMD_KEY_EXCHANGE_PHASE0 11
#define STARTEAM_SRVR_CMD_KEY_EXCHANGE_PHASE12 12
#define STARTEAM_SRVR_CMD_KEY_EXCHANGE_PHASE3 13
#define STARTEAM_SRVR_CMD_SERVER_LOGIN 14
#define STARTEAM_SRVR_CMD_GET_PROJECT_LIST 1001
#define STARTEAM_SRVR_CMD_GET_PROJECT_VIEWS 1002
#define STARTEAM_SRVR_CMD_PROJECT_LOGIN 1011
#define STARTEAM_SRVR_CMD_PROJECT_LOGOUT 1013
#define STARTEAM_PROJ_CMD_LIST_SET_READ 1014
#define STARTEAM_PROJ_CMD_LIST_ADD_ATTACHMENT 1015
#define STARTEAM_PROJ_CMD_LIST_GET_ATTACHMENT 1016
#define STARTEAM_PROJ_CMD_LIST_REMOVE_ATTACHMENT 1017
#define STARTEAM_PROJ_CMD_MAIL_LIST_ITEMS 1018
#define STARTEAM_PROJ_CMD_LIST_ANY_NEWITEMS 1020
#define STARTEAM_PROJ_CMD_LIST_GET_NEWITEMS 1021
/* #define STARTEAM_SRVR_CMD_RELEASE_CLIENT 1021 XXX: ?? */
#define STARTEAM_SRVR_CMD_UPDATE_SERVER_INFO 1022
#define STARTEAM_SRVR_CMD_GET_USAGE_DATA 1023
#define STARTEAM_SRVR_CMD_GET_LICENSE_INFO 1024
#define STARTEAM_PROJ_CMD_FILTER_ADD 1030
#define STARTEAM_PROJ_CMD_FILTER_MODIFY 1031
#define STARTEAM_PROJ_CMD_FILTER_GET 1032
#define STARTEAM_PROJ_CMD_FILTER_GET_LIST 1033
#define STARTEAM_PROJ_CMD_FILTER_DELETE 1034
#define STARTEAM_PROJ_CMD_QUERY_ADD 1035
#define STARTEAM_PROJ_CMD_QUERY_MODIFY 1036
#define STARTEAM_PROJ_CMD_QUERY_GET 1037
#define STARTEAM_PROJ_CMD_QUERY_GET_LIST 1038
#define STARTEAM_PROJ_CMD_QUERY_DELETE 1039
#define STARTEAM_PROJ_GET_FILTER_CLASS_ID 1040
#define STARTEAM_PROJ_GET_QUERY_CLASS_ID 1041
#define STARTEAM_SRVR_CMD_PROJECT_CREATE 1051
#define STARTEAM_SRVR_CMD_PROJECT_OPEN 1052
#define STARTEAM_SRVR_CMD_PROJECT_CLOSE 1053
#define STARTEAM_PROJ_CMD_CATALOG_LOADALL 1151
#define STARTEAM_PROJ_CMD_CATALOG_LOADSET 1152
#define STARTEAM_PROJ_CMD_CATALOG_LOADREGISTEREDCLASSES 1154
#define STARTEAM_PROJ_CMD_REFRESH_CLASS_INFO 1160
#define STARTEAM_PROJ_CMD_ADD_CUSTOM_FIELD_CLASS_INFO 1161
#define STARTEAM_PROJ_CMD_MODIFY_FIELD_CLASS_INFO 1162
#define STARTEAM_PROJ_CMD_ADD_CUSTOM_FIELD_CLASS_INFO_EX 1163
#define STARTEAM_PROJ_CMD_GET_FOLDER_ITEMS 2001
/* #define STARTEAM_SRVR_CMD_GET_USERS_AND_GROUPS 2001 XXX: ?? */
#define STARTEAM_PROJ_CMD_REFRESH_ITEMS 2002
#define STARTEAM_PROJ_CMD_GET_ITEM 2003
/* #define STARTEAM_SRVR_CMD_GET_EMAIL_USERS 2003 XXX: ?? */
#define STARTEAM_PROJ_CMD_UPDATE_ITEM 2004
#define STARTEAM_PROJ_CMD_DELETE_ITEM 2005
#define STARTEAM_PROJ_CMD_SET_ITEM_LOCK 2006
#define STARTEAM_PROJ_CMD_DELETE_TREE_ITEM 2007
#define STARTEAM_PROJ_CMD_GET_ITEM_HISTORY 2010
#define STARTEAM_SRVR_CMD_GET_USER_PERSONAL_INFO 2011
#define STARTEAM_SRVR_CMD_SET_USER_PERSONAL_INFO 2012
#define STARTEAM_SRVR_CMD_SET_USER_PASSWORD 2013
#define STARTEAM_PROJ_CMD_MOVE_ITEMS 2020
#define STARTEAM_PROJ_CMD_MOVE_TREE_ITEMS 2021
/* #define STARTEAM_SRVR_CMD_GET_GROUP_INFO 2021 XXX: ?? */
#define STARTEAM_PROJ_CMD_SHARE_ITEMS 2022
/* #define STARTEAM_SRVR_CMD_ADD_EDIT_GROUP_INFO 2022 XXX: ?? */
#define STARTEAM_PROJ_CMD_SHARE_TREE_ITEMS 2023
/* #define STARTEAM_SRVR_CMD_DROP_GROUP 2023 XXX: ?? */
#define STARTEAM_SRVR_CMD_GET_USER_INFO 2024
#define STARTEAM_SRVR_CMD_ADD_EDIT_USER_INFO 2025
#define STARTEAM_SRVR_CMD_DROP_USER 2026
#define STARTEAM_SRVR_CMD_GET_MIN_PASSWORD_LENGTH 2027
#define STARTEAM_SRVR_CMD_USER_ADMIN_OPERATION 2028
#define STARTEAM_SRVR_CMD_ACCESS_CHECK 2029
#define STARTEAM_PROJ_CMD_GET_COMMON_ANCESTOR_ITEM 2030
/* #define STARTEAM_SRVR_CMD_ACCESS_TEST 2030 XXX: ?? */
#define STARTEAM_PROJ_CMD_UPDATE_REVISION_COMMENT 2031
/* #define STARTEAM_SRVR_CMD_GET_MAIN_LOG_LAST64K 2031 XXX: ?? */
#define STARTEAM_SRVR_CMD_GET_SERVER_CONFIG 2032
#define STARTEAM_SRVR_CMD_SET_SERVER_CONFIG 2033
#define STARTEAM_SRVR_CMD_GET_SERVER_ACL 2034
#define STARTEAM_SRVR_CMD_DROP_SERVER_ACL 2035
#define STARTEAM_SRVR_CMD_SET_SERVER_ACL 2036
#define STARTEAM_SRVR_CMD_GET_SYSTEM_POLICY 2037
#define STARTEAM_SRVR_CMD_SET_SYSTEM_POLICY 2038
#define STARTEAM_SRVR_CMD_GET_SECURITY_LOG 2039
#define STARTEAM_SRVR_CMD_GET_SERVER_COMMAND_STATS 2040
#define STARTEAM_SRVR_CMD_SET_SERVER_COMMAND_MODE 2041
#define STARTEAM_SRVR_CMD_SHUTDOWN 2042
#define STARTEAM_SRVR_CMD_RESTART 2043
#define STARTEAM_SRVR_CMD_GET_SERVER_COMMAND_MODE 2045
#define STARTEAM_SRVR_CMD_GET_LOG 2046
#define STARTEAM_SRVR_CMD_GET_COMPONENT_LIST 2050
#define STARTEAM_SRVR_CMD_GET_GROUP_MEMBERS 2060
#define STARTEAM_PROJ_CMD_GET_ITEMS_VERSIONS 5001
#define STARTEAM_SRVR_CMD_VALIDATE_VSS_INI_PATH 9034
#define STARTEAM_SRVR_CMD_VALIDATE_PVCS_CFG_PATH 9035
#define STARTEAM_SRVR_CMD_GET_VSS_PROJECT_TREE 9036
#define STARTEAM_SRVR_CMD_GET_ALL_PVCS_ARCHIVES 9037
#define STARTEAM_SRVR_CMD_INITIALIZE_FOREIGN_ACCESS 9038
#define STARTEAM_SRVR_CMD_SET_FOREIGN_PROJECT_PW 9039
#define STARTEAM_PROJ_CMD_PING 10001
#define STARTEAM_PROJ_CMD_SET_LOCALE 10005
#define STARTEAM_PROJ_CMD_GET_CONTAINER_ACL 10011
#define STARTEAM_PROJ_CMD_SET_CONTAINER_ACL 10012
#define STARTEAM_PROJ_CMD_GET_CONTAINER_LEVEL_ACL 10013
#define STARTEAM_PROJ_CMD_SET_CONTAINER_LEVEL_ACL 10014
#define STARTEAM_PROJ_CMD_GET_OBJECT_ACL 10015
#define STARTEAM_PROJ_CMD_SET_OBJECT_ACL 10016
#define STARTEAM_PROJ_CMD_ITEM_ACCESS_CHECK 10017
#define STARTEAM_PROJ_CMD_ITEM_ACCESS_TEST 10018
#define STARTEAM_PROJ_CMD_GET_OWNER 10019
#define STARTEAM_PROJ_CMD_ACQUIRE_OWNERSHIP 10020
#define STARTEAM_PROJ_CMD_GET_FOLDERS 10021
#define STARTEAM_PROJ_CMD_ADD_FOLDERS 10023
#define STARTEAM_PROJ_CMD_DELETE_FOLDER 10024
#define STARTEAM_PROJ_CMD_MOVE_FOLDER 10025
#define STARTEAM_PROJ_CMD_SHARE_FOLDER 10026
#define STARTEAM_PROJ_CMD_CONTAINER_ACCESS_CHECK 10031
#define STARTEAM_PROJ_CMD_CONTAINER_ACCESS_TEST 10032
#define STARTEAM_PROJ_CMD_GET_OBJECT2_ACL 10035
#define STARTEAM_PROJ_CMD_SET_OBJECT2_ACL 10036
#define STARTEAM_PROJ_CMD_OBJECT_ACCESS_CHECK 10037
#define STARTEAM_PROJ_CMD_OBJECT_ACCESS_TEST 10038
#define STARTEAM_PROJ_CMD_GET_OBJECT_OWNER 10039
#define STARTEAM_PROJ_CMD_ACQUIRE_OBJECT_OWNERSHIP 10040
#define STARTEAM_PROJ_CMD_GET_FOLDER_PROPERTIES 10053
#define STARTEAM_PROJ_CMD_SET_FOLDER_PROPERTIES 10054
#define STARTEAM_PROJ_CMD_GET_ITEM_PROPERTIES 10060
#define STARTEAM_PROJ_CMD_SET_ITEM_PROPERTIES 10061
#define STARTEAM_PROJ_CMD_GET_ITEM_REFERENCES 10062
#define STARTEAM_PROJ_CMD_GET_ITEM_REFERENCE 10063
#define STARTEAM_PROJ_CMD_GET_ITEM_REVISIONS 10065
#define STARTEAM_PROJ_CMD_DELETE_PROJECT 10083
#define STARTEAM_PROJ_CMD_GET_PROJECT_PROPERTIES 10085
#define STARTEAM_PROJ_CMD_SET_PROJECT_PROPERTIES 10086
#define STARTEAM_PROJ_CMD_GET_VIEW_INFO 10090
#define STARTEAM_PROJ_CMD_ADD_VIEW 10091
#define STARTEAM_PROJ_CMD_GET_VIEWS 10092
#define STARTEAM_PROJ_CMD_GET_VIEW_PROPERTIES 10093
#define STARTEAM_PROJ_CMD_SET_VIEW_PROPERTIES 10094
#define STARTEAM_PROJ_CMD_DELETE_VIEW 10095
#define STARTEAM_PROJ_CMD_SWITCH_VIEW 10098
#define STARTEAM_PROJ_CMD_SWITCH_VIEW_CONFIG 10099
#define STARTEAM_PROJ_CMD_GET_FOLDER_PATH 10100
#define STARTEAM_FILE_CMD_CHECKOUT 10104
#define STARTEAM_FILE_CMD_GET_SYNC_INFO 10111
#define STARTEAM_FILE_CMD_DELETE_SYNC_INFO 10112
#define STARTEAM_FILE_CMD_GET_PATH_IDS 10117
#define STARTEAM_FILE_CMD_SYNC_UPDATE_ALL_INFO 10119
#define STARTEAM_FILE_CMD_RESYNC_FILE 10121
#define STARTEAM_FILE_CMD_CONVERT_ARCHIVE 10122
#define STARTEAM_FILE_CMD_ARCHIVE_CONVERSION 10123
#define STARTEAM_FILE_CMD_READ_PVCS_ARCHIVES 10130
#define STARTEAM_FILE_CMD_ADD_PVCS_ARCHIVES 10131
#define STARTEAM_FILE_CMD_ADD_PVCS_BRANCHES 10132
#define STARTEAM_FILE_CMD_FINISH_NEW_PVCS_PROJECT 10133
#define STARTEAM_FILE_CMD_GET_NUMBER_VSS_ARCHIVES 10134
#define STARTEAM_FILE_CMD_READ_VSS_ARCHIVES 10135
#define STARTEAM_FILE_CMD_ADD_VSS_ARCHIVE_TO_FOLDER 10136
#define STARTEAM_FILE_CMD_FINISH_NEW_VSS_PROJECT 10137
#define STARTEAM_FILE_CMD_REFRESH_FOREIGN_FOLDER 10138
#define STARTEAM_FILE_CMD_START_GO_NATIVE 10139
#define STARTEAM_FILE_CMD_GET_PROJECT_TYPE 10141
#define STARTEAM_FILE_CMD_SET_FOREIGN_PROJECT_PW 10142
#define STARTEAM_FILE_CMD_INTERNAL_NESTED_COMMAND 10143
#define STARTEAM_PROJ_CMD_LABEL_GET_INFO 10201
#define STARTEAM_PROJ_CMD_LABEL_GET_PROPERTIES 10202
#define STARTEAM_PROJ_CMD_LABEL_SET_PROPERTIES 10203
#define STARTEAM_PROJ_CMD_LABEL_CREATE 10205
#define STARTEAM_PROJ_CMD_LABEL_DELETE 10206
#define STARTEAM_PROJ_CMD_LABEL_ATTACH 10207
#define STARTEAM_PROJ_CMD_LABEL_MOVE 10208
#define STARTEAM_PROJ_CMD_LABEL_DETACH 10209
#define STARTEAM_PROJ_CMD_LABEL_GET_INFO_EX 10221
#define STARTEAM_PROJ_CMD_LABEL_CREATE_EX 10222
#define STARTEAM_PROJ_CMD_LABEL_ATTACH_EX 10223
#define STARTEAM_PROJ_CMD_LABEL_ATTACH_ITEMS 10224
#define STARTEAM_PROJ_CMD_LABEL_DETACH_EX 10225
#define STARTEAM_PROJ_CMD_LABEL_DETACH_ITEMS 10226
#define STARTEAM_PROJ_CMD_LABEL_GETITEMIDS 10229
#define STARTEAM_PROJ_CMD_LINK_GET_INFO 10300
#define STARTEAM_PROJ_CMD_LINK_CREATE 10301
#define STARTEAM_PROJ_CMD_LINK_DELETE 10302
#define STARTEAM_PROJ_CMD_LINK_UPDATE_PROPERTIES 10310
#define STARTEAM_PROJ_CMD_LINK_UPDATE_PINS 10311
#define STARTEAM_PROJ_CMD_PROMOTION_GET 10400
#define STARTEAM_PROJ_CMD_PROMOTION_SET 10401
#define STARTEAM_TASK_CMD_GET_WORKRECS 10402
#define STARTEAM_TASK_CMD_ADD_WORKREC 10403
#define STARTEAM_TASK_CMD_UPDATE_WORKREC 10404
#define STARTEAM_TASK_CMD_DELETE_WORKREC 10405
#define STARTEAM_TASK_CMD_DELETE_TASK_PREDECESSOR 10408
#define STARTEAM_TASK_CMD_GET_TASK_DEPENDENCIES 10409
#define STARTEAM_TASK_CMD_ADD_TASK_PREDECESSOR 10410
#define STARTEAM_TASK_CMD_UPDATE_TASK_PREDECESSOR 10411
#define STARTEAM_PROJ_CMD_VIEW_COMPARE_GET_FOLDER_DETAILS 20070
#define STARTEAM_PROJ_CMD_VIEW_COMPARE_RELATE_ITEMS 20071
#define STARTEAM_TEXT_MDH "Message Data Header"
#define STARTEAM_TEXT_PH "Packet Header"
#define STARTEAM_TEXT_ID "ID"
#define STARTEAM_TEXT_DATA "Data"
static const value_string starteam_opcode_vals[] = {
{ STARTEAM_SRVR_CMD_GET_SESSION_TAG, "SRVR_CMD_GET_SESSION_TAG" },
{ STARTEAM_SRVR_CMD_GET_REQUIRED_ENCRYPTION_LEVEL, "SRVR_CMD_GET_REQUIRED_ENCRYPTION_LEVEL" },
{ STARTEAM_SRVR_CMD_GET_SERVER_PARAMS, "SRVR_CMD_GET_SERVER_PARAMS" },
{ STARTEAM_SRVR_CMD_SERVER_CONNECT, "SRVR_CMD_SERVER_CONNECT" },
{ STARTEAM_SRVR_CMD_SERVER_RECONNECT, "SRVR_CMD_SERVER_RECONNECT" },
{ STARTEAM_SRVR_CMD_BEGIN_LOGIN, "SRVR_CMD_BEGIN_LOGIN" },
{ STARTEAM_SRVR_CMD_KEY_EXCHANGE_PHASE0, "SRVR_CMD_KEY_EXCHANGE_PHASE0" },
{ STARTEAM_SRVR_CMD_KEY_EXCHANGE_PHASE12, "SRVR_CMD_KEY_EXCHANGE_PHASE12" },
{ STARTEAM_SRVR_CMD_KEY_EXCHANGE_PHASE3, "SRVR_CMD_KEY_EXCHANGE_PHASE3" },
{ STARTEAM_SRVR_CMD_SERVER_LOGIN, "SRVR_CMD_SERVER_LOGIN" },
{ STARTEAM_SRVR_CMD_GET_PROJECT_LIST, "SRVR_CMD_GET_PROJECT_LIST" },
{ STARTEAM_SRVR_CMD_GET_PROJECT_VIEWS, "SRVR_CMD_GET_PROJECT_VIEWS" },
{ STARTEAM_SRVR_CMD_PROJECT_LOGIN, "SRVR_CMD_PROJECT_LOGIN" },
{ STARTEAM_SRVR_CMD_PROJECT_LOGOUT, "SRVR_CMD_PROJECT_LOGOUT" },
{ STARTEAM_PROJ_CMD_LIST_SET_READ, "PROJ_CMD_LIST_SET_READ" },
{ STARTEAM_PROJ_CMD_LIST_ADD_ATTACHMENT, "PROJ_CMD_LIST_ADD_ATTACHMENT" },
{ STARTEAM_PROJ_CMD_LIST_GET_ATTACHMENT, "PROJ_CMD_LIST_GET_ATTACHMENT" },
{ STARTEAM_PROJ_CMD_LIST_REMOVE_ATTACHMENT, "PROJ_CMD_LIST_REMOVE_ATTACHMENT" },
{ STARTEAM_PROJ_CMD_MAIL_LIST_ITEMS, "PROJ_CMD_MAIL_LIST_ITEMS" },
{ STARTEAM_PROJ_CMD_LIST_ANY_NEWITEMS, "PROJ_CMD_LIST_ANY_NEWITEMS" },
{ STARTEAM_PROJ_CMD_LIST_GET_NEWITEMS, "PROJ_CMD_LIST_GET_NEWITEMS" },
/* { STARTEAM_SRVR_CMD_RELEASE_CLIENT, "SRVR_CMD_RELEASE_CLIENT" }, */
{ STARTEAM_SRVR_CMD_UPDATE_SERVER_INFO, "SRVR_CMD_UPDATE_SERVER_INFO" },
{ STARTEAM_SRVR_CMD_GET_USAGE_DATA, "SRVR_CMD_GET_USAGE_DATA" },
{ STARTEAM_SRVR_CMD_GET_LICENSE_INFO, "SRVR_CMD_GET_LICENSE_INFO" },
{ STARTEAM_PROJ_CMD_FILTER_ADD, "PROJ_CMD_FILTER_ADD" },
{ STARTEAM_PROJ_CMD_FILTER_MODIFY, "PROJ_CMD_FILTER_MODIFY" },
{ STARTEAM_PROJ_CMD_FILTER_GET, "PROJ_CMD_FILTER_GET" },
{ STARTEAM_PROJ_CMD_FILTER_GET_LIST, "PROJ_CMD_FILTER_GET_LIST" },
{ STARTEAM_PROJ_CMD_FILTER_DELETE, "PROJ_CMD_FILTER_DELETE" },
{ STARTEAM_PROJ_CMD_QUERY_ADD, "PROJ_CMD_QUERY_ADD" },
{ STARTEAM_PROJ_CMD_QUERY_MODIFY, "PROJ_CMD_QUERY_MODIFY" },
{ STARTEAM_PROJ_CMD_QUERY_GET, "PROJ_CMD_QUERY_GET" },
{ STARTEAM_PROJ_CMD_QUERY_GET_LIST, "PROJ_CMD_QUERY_GET_LIST" },
{ STARTEAM_PROJ_CMD_QUERY_DELETE, "PROJ_CMD_QUERY_DELETE" },
{ STARTEAM_PROJ_GET_FILTER_CLASS_ID, "PROJ_GET_FILTER_CLASS_ID" },
{ STARTEAM_PROJ_GET_QUERY_CLASS_ID, "PROJ_GET_QUERY_CLASS_ID" },
{ STARTEAM_SRVR_CMD_PROJECT_CREATE, "SRVR_CMD_PROJECT_CREATE" },
{ STARTEAM_SRVR_CMD_PROJECT_OPEN, "SRVR_CMD_PROJECT_OPEN" },
{ STARTEAM_SRVR_CMD_PROJECT_CLOSE, "SRVR_CMD_PROJECT_CLOSE" },
{ STARTEAM_PROJ_CMD_CATALOG_LOADALL, "PROJ_CMD_CATALOG_LOADALL" },
{ STARTEAM_PROJ_CMD_CATALOG_LOADSET, "PROJ_CMD_CATALOG_LOADSET" },
{ STARTEAM_PROJ_CMD_CATALOG_LOADREGISTEREDCLASSES, "PROJ_CMD_CATALOG_LOADREGISTEREDCLASSES" },
{ STARTEAM_PROJ_CMD_REFRESH_CLASS_INFO, "PROJ_CMD_REFRESH_CLASS_INFO" },
{ STARTEAM_PROJ_CMD_ADD_CUSTOM_FIELD_CLASS_INFO, "PROJ_CMD_ADD_CUSTOM_FIELD_CLASS_INFO" },
{ STARTEAM_PROJ_CMD_MODIFY_FIELD_CLASS_INFO, "PROJ_CMD_MODIFY_FIELD_CLASS_INFO" },
{ STARTEAM_PROJ_CMD_ADD_CUSTOM_FIELD_CLASS_INFO_EX, "PROJ_CMD_ADD_CUSTOM_FIELD_CLASS_INFO_EX" },
{ STARTEAM_PROJ_CMD_GET_FOLDER_ITEMS, "PROJ_CMD_GET_FOLDER_ITEMS" },
/* { STARTEAM_SRVR_CMD_GET_USERS_AND_GROUPS, "SRVR_CMD_GET_USERS_AND_GROUPS" }, */
{ STARTEAM_PROJ_CMD_REFRESH_ITEMS, "PROJ_CMD_REFRESH_ITEMS" },
{ STARTEAM_PROJ_CMD_GET_ITEM, "PROJ_CMD_GET_ITEM" },
/* { STARTEAM_SRVR_CMD_GET_EMAIL_USERS, "SRVR_CMD_GET_EMAIL_USERS" }, */
{ STARTEAM_PROJ_CMD_UPDATE_ITEM, "PROJ_CMD_UPDATE_ITEM" },
{ STARTEAM_PROJ_CMD_DELETE_ITEM, "PROJ_CMD_DELETE_ITEM" },
{ STARTEAM_PROJ_CMD_SET_ITEM_LOCK, "PROJ_CMD_SET_ITEM_LOCK" },
{ STARTEAM_PROJ_CMD_DELETE_TREE_ITEM, "PROJ_CMD_DELETE_TREE_ITEM" },
{ STARTEAM_PROJ_CMD_GET_ITEM_HISTORY, "PROJ_CMD_GET_ITEM_HISTORY" },
{ STARTEAM_SRVR_CMD_GET_USER_PERSONAL_INFO, "SRVR_CMD_GET_USER_PERSONAL_INFO" },
{ STARTEAM_SRVR_CMD_SET_USER_PERSONAL_INFO, "SRVR_CMD_SET_USER_PERSONAL_INFO" },
{ STARTEAM_SRVR_CMD_SET_USER_PASSWORD, "SRVR_CMD_SET_USER_PASSWORD" },
{ STARTEAM_PROJ_CMD_MOVE_ITEMS, "PROJ_CMD_MOVE_ITEMS" },
{ STARTEAM_PROJ_CMD_MOVE_TREE_ITEMS, "PROJ_CMD_MOVE_TREE_ITEMS" },
/* { STARTEAM_SRVR_CMD_GET_GROUP_INFO, "SRVR_CMD_GET_GROUP_INFO" }, */
{ STARTEAM_PROJ_CMD_SHARE_ITEMS, "PROJ_CMD_SHARE_ITEMS" },
/* { STARTEAM_SRVR_CMD_ADD_EDIT_GROUP_INFO, "SRVR_CMD_ADD_EDIT_GROUP_INFO" }, */
{ STARTEAM_PROJ_CMD_SHARE_TREE_ITEMS, "PROJ_CMD_SHARE_TREE_ITEMS" },
/* { STARTEAM_SRVR_CMD_DROP_GROUP, "SRVR_CMD_DROP_GROUP" }, */
{ STARTEAM_SRVR_CMD_GET_USER_INFO, "SRVR_CMD_GET_USER_INFO" },
{ STARTEAM_SRVR_CMD_ADD_EDIT_USER_INFO, "SRVR_CMD_ADD_EDIT_USER_INFO" },
{ STARTEAM_SRVR_CMD_DROP_USER, "SRVR_CMD_DROP_USER" },
{ STARTEAM_SRVR_CMD_GET_MIN_PASSWORD_LENGTH, "SRVR_CMD_GET_MIN_PASSWORD_LENGTH" },
{ STARTEAM_SRVR_CMD_USER_ADMIN_OPERATION, "SRVR_CMD_USER_ADMIN_OPERATION" },
{ STARTEAM_SRVR_CMD_ACCESS_CHECK, "SRVR_CMD_ACCESS_CHECK" },
{ STARTEAM_PROJ_CMD_GET_COMMON_ANCESTOR_ITEM, "PROJ_CMD_GET_COMMON_ANCESTOR_ITEM" },
/* { STARTEAM_SRVR_CMD_ACCESS_TEST, "SRVR_CMD_ACCESS_TEST" }, */
{ STARTEAM_PROJ_CMD_UPDATE_REVISION_COMMENT, "PROJ_CMD_UPDATE_REVISION_COMMENT" },
/* { STARTEAM_SRVR_CMD_GET_MAIN_LOG_LAST64K, "SRVR_CMD_GET_MAIN_LOG_LAST64K" }, */
{ STARTEAM_SRVR_CMD_GET_SERVER_CONFIG, "SRVR_CMD_GET_SERVER_CONFIG" },
{ STARTEAM_SRVR_CMD_SET_SERVER_CONFIG, "SRVR_CMD_SET_SERVER_CONFIG" },
{ STARTEAM_SRVR_CMD_GET_SERVER_ACL, "SRVR_CMD_GET_SERVER_ACL" },
{ STARTEAM_SRVR_CMD_DROP_SERVER_ACL, "SRVR_CMD_DROP_SERVER_ACL" },
{ STARTEAM_SRVR_CMD_SET_SERVER_ACL, "SRVR_CMD_SET_SERVER_ACL" },
{ STARTEAM_SRVR_CMD_GET_SYSTEM_POLICY, "SRVR_CMD_GET_SYSTEM_POLICY" },
{ STARTEAM_SRVR_CMD_SET_SYSTEM_POLICY, "SRVR_CMD_SET_SYSTEM_POLICY" },
{ STARTEAM_SRVR_CMD_GET_SECURITY_LOG, "SRVR_CMD_GET_SECURITY_LOG" },
{ STARTEAM_SRVR_CMD_GET_SERVER_COMMAND_STATS, "SRVR_CMD_GET_SERVER_COMMAND_STATS" },
{ STARTEAM_SRVR_CMD_SET_SERVER_COMMAND_MODE, "SRVR_CMD_SET_SERVER_COMMAND_MODE" },
{ STARTEAM_SRVR_CMD_SHUTDOWN, "SRVR_CMD_SHUTDOWN" },
{ STARTEAM_SRVR_CMD_RESTART, "SRVR_CMD_RESTART" },
{ STARTEAM_SRVR_CMD_GET_SERVER_COMMAND_MODE, "SRVR_CMD_GET_SERVER_COMMAND_MODE" },
{ STARTEAM_SRVR_CMD_GET_LOG, "SRVR_CMD_GET_LOG" },
{ STARTEAM_SRVR_CMD_GET_COMPONENT_LIST, "SRVR_CMD_GET_COMPONENT_LIST" },
{ STARTEAM_SRVR_CMD_GET_GROUP_MEMBERS, "SRVR_CMD_GET_GROUP_MEMBERS" },
{ STARTEAM_PROJ_CMD_GET_ITEMS_VERSIONS, "PROJ_CMD_GET_ITEMS_VERSIONS" },
{ STARTEAM_SRVR_CMD_VALIDATE_VSS_INI_PATH, "SRVR_CMD_VALIDATE_VSS_INI_PATH" },
{ STARTEAM_SRVR_CMD_VALIDATE_PVCS_CFG_PATH, "SRVR_CMD_VALIDATE_PVCS_CFG_PATH" },
{ STARTEAM_SRVR_CMD_GET_VSS_PROJECT_TREE, "SRVR_CMD_GET_VSS_PROJECT_TREE" },
{ STARTEAM_SRVR_CMD_GET_ALL_PVCS_ARCHIVES, "SRVR_CMD_GET_ALL_PVCS_ARCHIVES" },
{ STARTEAM_SRVR_CMD_INITIALIZE_FOREIGN_ACCESS, "SRVR_CMD_INITIALIZE_FOREIGN_ACCESS" },
{ STARTEAM_SRVR_CMD_SET_FOREIGN_PROJECT_PW, "SRVR_CMD_SET_FOREIGN_PROJECT_PW" },
{ STARTEAM_PROJ_CMD_PING, "PROJ_CMD_PING" },
{ STARTEAM_PROJ_CMD_SET_LOCALE, "PROJ_CMD_SET_LOCALE" },
{ STARTEAM_PROJ_CMD_GET_CONTAINER_ACL, "PROJ_CMD_GET_CONTAINER_ACL" },
{ STARTEAM_PROJ_CMD_SET_CONTAINER_ACL, "PROJ_CMD_SET_CONTAINER_ACL" },
{ STARTEAM_PROJ_CMD_GET_CONTAINER_LEVEL_ACL, "PROJ_CMD_GET_CONTAINER_LEVEL_ACL" },
{ STARTEAM_PROJ_CMD_SET_CONTAINER_LEVEL_ACL, "PROJ_CMD_SET_CONTAINER_LEVEL_ACL" },
{ STARTEAM_PROJ_CMD_GET_OBJECT_ACL, "PROJ_CMD_GET_OBJECT_ACL" },
{ STARTEAM_PROJ_CMD_SET_OBJECT_ACL, "PROJ_CMD_SET_OBJECT_ACL" },
{ STARTEAM_PROJ_CMD_ITEM_ACCESS_CHECK, "PROJ_CMD_ITEM_ACCESS_CHECK" },
{ STARTEAM_PROJ_CMD_ITEM_ACCESS_TEST, "PROJ_CMD_ITEM_ACCESS_TEST" },
{ STARTEAM_PROJ_CMD_GET_OWNER, "PROJ_CMD_GET_OWNER" },
{ STARTEAM_PROJ_CMD_ACQUIRE_OWNERSHIP, "PROJ_CMD_ACQUIRE_OWNERSHIP" },
{ STARTEAM_PROJ_CMD_GET_FOLDERS, "PROJ_CMD_GET_FOLDERS" },
{ STARTEAM_PROJ_CMD_ADD_FOLDERS, "PROJ_CMD_ADD_FOLDERS" },
{ STARTEAM_PROJ_CMD_DELETE_FOLDER, "PROJ_CMD_DELETE_FOLDER" },
{ STARTEAM_PROJ_CMD_MOVE_FOLDER, "PROJ_CMD_MOVE_FOLDER" },
{ STARTEAM_PROJ_CMD_SHARE_FOLDER, "PROJ_CMD_SHARE_FOLDER" },
{ STARTEAM_PROJ_CMD_CONTAINER_ACCESS_CHECK, "PROJ_CMD_CONTAINER_ACCESS_CHECK" },
{ STARTEAM_PROJ_CMD_CONTAINER_ACCESS_TEST, "PROJ_CMD_CONTAINER_ACCESS_TEST" },
{ STARTEAM_PROJ_CMD_GET_OBJECT2_ACL, "PROJ_CMD_GET_OBJECT2_ACL" },
{ STARTEAM_PROJ_CMD_SET_OBJECT2_ACL, "PROJ_CMD_SET_OBJECT2_ACL" },
{ STARTEAM_PROJ_CMD_OBJECT_ACCESS_CHECK, "PROJ_CMD_OBJECT_ACCESS_CHECK" },
{ STARTEAM_PROJ_CMD_OBJECT_ACCESS_TEST, "PROJ_CMD_OBJECT_ACCESS_TEST" },
{ STARTEAM_PROJ_CMD_GET_OBJECT_OWNER, "PROJ_CMD_GET_OBJECT_OWNER" },
{ STARTEAM_PROJ_CMD_ACQUIRE_OBJECT_OWNERSHIP, "PROJ_CMD_ACQUIRE_OBJECT_OWNERSHIP" },
{ STARTEAM_PROJ_CMD_GET_FOLDER_PROPERTIES, "PROJ_CMD_GET_FOLDER_PROPERTIES" },
{ STARTEAM_PROJ_CMD_SET_FOLDER_PROPERTIES, "PROJ_CMD_SET_FOLDER_PROPERTIES" },
{ STARTEAM_PROJ_CMD_GET_ITEM_PROPERTIES, "PROJ_CMD_GET_ITEM_PROPERTIES" },
{ STARTEAM_PROJ_CMD_SET_ITEM_PROPERTIES, "PROJ_CMD_SET_ITEM_PROPERTIES" },
{ STARTEAM_PROJ_CMD_GET_ITEM_REFERENCES, "PROJ_CMD_GET_ITEM_REFERENCES" },
{ STARTEAM_PROJ_CMD_GET_ITEM_REFERENCE, "PROJ_CMD_GET_ITEM_REFERENCE" },
{ STARTEAM_PROJ_CMD_GET_ITEM_REVISIONS, "PROJ_CMD_GET_ITEM_REVISIONS" },
{ STARTEAM_PROJ_CMD_DELETE_PROJECT, "PROJ_CMD_DELETE_PROJECT" },
{ STARTEAM_PROJ_CMD_GET_PROJECT_PROPERTIES, "PROJ_CMD_GET_PROJECT_PROPERTIES" },
{ STARTEAM_PROJ_CMD_SET_PROJECT_PROPERTIES, "PROJ_CMD_SET_PROJECT_PROPERTIES" },
{ STARTEAM_PROJ_CMD_GET_VIEW_INFO, "PROJ_CMD_GET_VIEW_INFO" },
{ STARTEAM_PROJ_CMD_ADD_VIEW, "PROJ_CMD_ADD_VIEW" },
{ STARTEAM_PROJ_CMD_GET_VIEWS, "PROJ_CMD_GET_VIEWS" },
{ STARTEAM_PROJ_CMD_GET_VIEW_PROPERTIES, "PROJ_CMD_GET_VIEW_PROPERTIES" },
{ STARTEAM_PROJ_CMD_SET_VIEW_PROPERTIES, "PROJ_CMD_SET_VIEW_PROPERTIES" },
{ STARTEAM_PROJ_CMD_DELETE_VIEW, "PROJ_CMD_DELETE_VIEW" },
{ STARTEAM_PROJ_CMD_SWITCH_VIEW, "PROJ_CMD_SWITCH_VIEW" },
{ STARTEAM_PROJ_CMD_SWITCH_VIEW_CONFIG, "PROJ_CMD_SWITCH_VIEW_CONFIG" },
{ STARTEAM_PROJ_CMD_GET_FOLDER_PATH, "PROJ_CMD_GET_FOLDER_PATH" },
{ STARTEAM_FILE_CMD_CHECKOUT, "FILE_CMD_CHECKOUT" },
{ STARTEAM_FILE_CMD_GET_SYNC_INFO, "FILE_CMD_GET_SYNC_INFO" },
{ STARTEAM_FILE_CMD_DELETE_SYNC_INFO, "FILE_CMD_DELETE_SYNC_INFO" },
{ STARTEAM_FILE_CMD_GET_PATH_IDS, "FILE_CMD_GET_PATH_IDS" },
{ STARTEAM_FILE_CMD_SYNC_UPDATE_ALL_INFO, "FILE_CMD_SYNC_UPDATE_ALL_INFO" },
{ STARTEAM_FILE_CMD_RESYNC_FILE, "FILE_CMD_RESYNC_FILE" },
{ STARTEAM_FILE_CMD_CONVERT_ARCHIVE, "FILE_CMD_CONVERT_ARCHIVE" },
{ STARTEAM_FILE_CMD_ARCHIVE_CONVERSION, "FILE_CMD_ARCHIVE_CONVERSION" },
{ STARTEAM_FILE_CMD_READ_PVCS_ARCHIVES, "FILE_CMD_READ_PVCS_ARCHIVES" },
{ STARTEAM_FILE_CMD_ADD_PVCS_ARCHIVES, "FILE_CMD_ADD_PVCS_ARCHIVES" },
{ STARTEAM_FILE_CMD_ADD_PVCS_BRANCHES, "FILE_CMD_ADD_PVCS_BRANCHES" },
{ STARTEAM_FILE_CMD_FINISH_NEW_PVCS_PROJECT, "FILE_CMD_FINISH_NEW_PVCS_PROJECT" },
{ STARTEAM_FILE_CMD_GET_NUMBER_VSS_ARCHIVES, "FILE_CMD_GET_NUMBER_VSS_ARCHIVES" },
{ STARTEAM_FILE_CMD_READ_VSS_ARCHIVES, "FILE_CMD_READ_VSS_ARCHIVES" },
{ STARTEAM_FILE_CMD_ADD_VSS_ARCHIVE_TO_FOLDER, "FILE_CMD_ADD_VSS_ARCHIVE_TO_FOLDER" },
{ STARTEAM_FILE_CMD_FINISH_NEW_VSS_PROJECT, "FILE_CMD_FINISH_NEW_VSS_PROJECT" },
{ STARTEAM_FILE_CMD_REFRESH_FOREIGN_FOLDER, "FILE_CMD_REFRESH_FOREIGN_FOLDER" },
{ STARTEAM_FILE_CMD_START_GO_NATIVE, "FILE_CMD_START_GO_NATIVE" },
{ STARTEAM_FILE_CMD_GET_PROJECT_TYPE, "FILE_CMD_GET_PROJECT_TYPE" },
{ STARTEAM_FILE_CMD_SET_FOREIGN_PROJECT_PW, "FILE_CMD_SET_FOREIGN_PROJECT_PW" },
{ STARTEAM_FILE_CMD_INTERNAL_NESTED_COMMAND, "FILE_CMD_INTERNAL_NESTED_COMMAND" },
{ STARTEAM_PROJ_CMD_LABEL_GET_INFO, "PROJ_CMD_LABEL_GET_INFO" },
{ STARTEAM_PROJ_CMD_LABEL_GET_PROPERTIES, "PROJ_CMD_LABEL_GET_PROPERTIES" },
{ STARTEAM_PROJ_CMD_LABEL_SET_PROPERTIES, "PROJ_CMD_LABEL_SET_PROPERTIES" },
{ STARTEAM_PROJ_CMD_LABEL_CREATE, "PROJ_CMD_LABEL_CREATE" },
{ STARTEAM_PROJ_CMD_LABEL_DELETE, "PROJ_CMD_LABEL_DELETE" },
{ STARTEAM_PROJ_CMD_LABEL_ATTACH, "PROJ_CMD_LABEL_ATTACH" },
{ STARTEAM_PROJ_CMD_LABEL_MOVE, "PROJ_CMD_LABEL_MOVE" },
{ STARTEAM_PROJ_CMD_LABEL_DETACH, "PROJ_CMD_LABEL_DETACH" },
{ STARTEAM_PROJ_CMD_LABEL_GET_INFO_EX, "PROJ_CMD_LABEL_GET_INFO_EX" },
{ STARTEAM_PROJ_CMD_LABEL_CREATE_EX, "PROJ_CMD_LABEL_CREATE_EX" },
{ STARTEAM_PROJ_CMD_LABEL_ATTACH_EX, "PROJ_CMD_LABEL_ATTACH_EX" },
{ STARTEAM_PROJ_CMD_LABEL_ATTACH_ITEMS, "PROJ_CMD_LABEL_ATTACH_ITEMS" },
{ STARTEAM_PROJ_CMD_LABEL_DETACH_EX, "PROJ_CMD_LABEL_DETACH_EX" },
{ STARTEAM_PROJ_CMD_LABEL_DETACH_ITEMS, "PROJ_CMD_LABEL_DETACH_ITEMS" },
{ STARTEAM_PROJ_CMD_LABEL_GETITEMIDS, "PROJ_CMD_LABEL_GETITEMIDS" },
{ STARTEAM_PROJ_CMD_LINK_GET_INFO, "PROJ_CMD_LINK_GET_INFO" },
{ STARTEAM_PROJ_CMD_LINK_CREATE, "PROJ_CMD_LINK_CREATE" },
{ STARTEAM_PROJ_CMD_LINK_DELETE, "PROJ_CMD_LINK_DELETE" },
{ STARTEAM_PROJ_CMD_LINK_UPDATE_PROPERTIES, "PROJ_CMD_LINK_UPDATE_PROPERTIES" },
{ STARTEAM_PROJ_CMD_LINK_UPDATE_PINS, "PROJ_CMD_LINK_UPDATE_PINS" },
{ STARTEAM_PROJ_CMD_PROMOTION_GET, "PROJ_CMD_PROMOTION_GET" },
{ STARTEAM_PROJ_CMD_PROMOTION_SET, "PROJ_CMD_PROMOTION_SET" },
{ STARTEAM_TASK_CMD_GET_WORKRECS, "TASK_CMD_GET_WORKRECS" },
{ STARTEAM_TASK_CMD_ADD_WORKREC, "TASK_CMD_ADD_WORKREC" },
{ STARTEAM_TASK_CMD_UPDATE_WORKREC, "TASK_CMD_UPDATE_WORKREC" },
{ STARTEAM_TASK_CMD_DELETE_WORKREC, "TASK_CMD_DELETE_WORKREC" },
{ STARTEAM_TASK_CMD_DELETE_TASK_PREDECESSOR, "TASK_CMD_DELETE_TASK_PREDECESSOR" },
{ STARTEAM_TASK_CMD_GET_TASK_DEPENDENCIES, "TASK_CMD_GET_TASK_DEPENDENCIES" },
{ STARTEAM_TASK_CMD_ADD_TASK_PREDECESSOR, "TASK_CMD_ADD_TASK_PREDECESSOR" },
{ STARTEAM_TASK_CMD_UPDATE_TASK_PREDECESSOR, "TASK_CMD_UPDATE_TASK_PREDECESSOR" },
{ STARTEAM_PROJ_CMD_VIEW_COMPARE_GET_FOLDER_DETAILS, "PROJ_CMD_VIEW_COMPARE_GET_FOLDER_DETAILS" },
{ STARTEAM_PROJ_CMD_VIEW_COMPARE_RELATE_ITEMS, "PROJ_CMD_VIEW_COMPARE_RELATE_ITEMS" },
{ 0, NULL }
};
static value_string_ext starteam_opcode_vals_ext = VALUE_STRING_EXT_INIT(starteam_opcode_vals);
static int iPreviousFrameNumber = -1;
static void
starteam_init(void)
{
iPreviousFrameNumber = -1;
}
static int
dissect_starteam(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
{
int offset = 0;
col_set_str(pinfo->cinfo, COL_PROTOCOL, "StarTeam");
/* This is a trick to know whether this is the first PDU in this packet or not */
if(iPreviousFrameNumber != (int) pinfo->num){
col_clear(pinfo->cinfo, COL_INFO);
} else {
col_append_str(pinfo->cinfo, COL_INFO, " | ");
}
iPreviousFrameNumber = pinfo->num;
if(tvb_captured_length(tvb) >= 16){
uint32_t iCommand = 0;
bool bRequest = false;
if(tvb_get_ntohl(tvb, offset + 0) == STARTEAM_MAGIC){
/* This packet is a response */
bRequest = false;
col_append_fstr(pinfo->cinfo, COL_INFO, "Reply: %d bytes", tvb_reported_length(tvb));
} else if(tvb_captured_length_remaining(tvb, offset) >= 28 && tvb_get_ntohl(tvb, offset + 20) == STARTEAM_MAGIC){
/* This packet is a request */
bRequest = true;
if(tvb_captured_length_remaining(tvb, offset) >= 66){
iCommand = tvb_get_letohl(tvb, offset + 62);
}
col_append_str(pinfo->cinfo, COL_INFO,
val_to_str_ext(iCommand, &starteam_opcode_vals_ext, "Unknown (0x%02x)"));
}
if(tree){
proto_tree *starteam_tree;
proto_tree *starteamroot_tree;
proto_item *ti;
ti = proto_tree_add_item(tree, proto_starteam, tvb, offset, -1, ENC_NA);
if (bRequest) proto_item_append_text(ti, " (%s)",
val_to_str_ext(iCommand, &starteam_opcode_vals_ext, "Unknown (0x%02x)"));
starteamroot_tree = proto_item_add_subtree(ti, ett_starteam);
if(bRequest){
if(tvb_reported_length_remaining(tvb, offset) >= 20){
starteam_tree = proto_tree_add_subtree(starteamroot_tree, tvb, offset, 20, ett_starteam_mdh, NULL, STARTEAM_TEXT_MDH);
proto_tree_add_item(starteam_tree, hf_starteam_mdh_session_tag, tvb, offset + 0, 4, ENC_LITTLE_ENDIAN);
proto_tree_add_item(starteam_tree, hf_starteam_mdh_ctimestamp, tvb, offset + 4, 4, ENC_LITTLE_ENDIAN);
proto_tree_add_item(starteam_tree, hf_starteam_mdh_flags, tvb, offset + 8, 4, ENC_LITTLE_ENDIAN);
proto_tree_add_item(starteam_tree, hf_starteam_mdh_keyid, tvb, offset + 12, 4, ENC_LITTLE_ENDIAN);
proto_tree_add_item(starteam_tree, hf_starteam_mdh_reserved, tvb, offset + 16, 4, ENC_LITTLE_ENDIAN);
offset += 20;
}
}
if(tvb_reported_length_remaining(tvb, offset) >= 16){
starteam_tree = proto_tree_add_subtree(starteamroot_tree, tvb, offset, 16, ett_starteam_ph, NULL, STARTEAM_TEXT_PH);
proto_tree_add_item(starteam_tree, hf_starteam_ph_signature, tvb, offset + 0, 4, ENC_ASCII);
proto_tree_add_item(starteam_tree, hf_starteam_ph_packet_size, tvb, offset + 4, 4, ENC_LITTLE_ENDIAN);
proto_tree_add_item(starteam_tree, hf_starteam_ph_data_size, tvb, offset + 8, 4, ENC_LITTLE_ENDIAN);
proto_tree_add_item(starteam_tree, hf_starteam_ph_data_flags, tvb, offset + 12, 4, ENC_LITTLE_ENDIAN);
offset += 16;
if(bRequest){
if(tvb_reported_length_remaining(tvb, offset) >= 38){
starteam_tree = proto_tree_add_subtree(starteamroot_tree, tvb, offset, 38, ett_starteam_id, NULL, STARTEAM_TEXT_ID);
proto_tree_add_item(starteam_tree, hf_starteam_id_revision_level, tvb, offset + 0, 2, ENC_LITTLE_ENDIAN);
proto_tree_add_item(starteam_tree, hf_starteam_id_client, tvb, offset + 2, 16, ENC_ASCII);
proto_tree_add_item(starteam_tree, hf_starteam_id_connect, tvb, offset + 18, 4, ENC_LITTLE_ENDIAN);
proto_tree_add_item(starteam_tree, hf_starteam_id_component, tvb, offset + 22, 4, ENC_LITTLE_ENDIAN);
proto_tree_add_item(starteam_tree, hf_starteam_id_command, tvb, offset + 26, 4, ENC_LITTLE_ENDIAN);
proto_tree_add_item(starteam_tree, hf_starteam_id_command_time, tvb, offset + 30, 4, ENC_LITTLE_ENDIAN);
proto_tree_add_item(starteam_tree, hf_starteam_id_command_userid, tvb, offset + 34, 4, ENC_LITTLE_ENDIAN);
offset += 38;
}
}
if(tvb_reported_length_remaining(tvb, offset) > 0){
starteam_tree = proto_tree_add_subtree(starteamroot_tree, tvb, offset, -1, ett_starteam_data, NULL, STARTEAM_TEXT_DATA);
proto_tree_add_item(starteam_tree, hf_starteam_data_data, tvb, offset, -1, ENC_ASCII);
}
}
}
}
return tvb_captured_length(tvb);
}
static unsigned
get_starteam_pdu_len(packet_info *pinfo _U_, tvbuff_t *tvb,
int offset, void *data _U_)
{
uint32_t iPDULength = 0;
if(tvb_captured_length_remaining(tvb, offset) >= 8 && tvb_get_ntohl(tvb, offset + 0) == STARTEAM_MAGIC){
/* Response */
iPDULength = tvb_get_letohl(tvb, offset + 4) + 16;
} else if(tvb_captured_length_remaining(tvb, offset) >= 28 && tvb_get_ntohl(tvb, offset + 20) == STARTEAM_MAGIC){
/* Request */
iPDULength = tvb_get_letohl(tvb, offset + 24) + 36;
}
return iPDULength;
}
static int
dissect_starteam_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
{
tcp_dissect_pdus(tvb, pinfo, tree, starteam_desegment, 8, get_starteam_pdu_len, dissect_starteam, data);
return tvb_captured_length(tvb);
}
static bool
dissect_starteam_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
{
if(tvb_captured_length(tvb) >= 32){
int iOffsetLengths = -1;
if(tvb_get_ntohl(tvb, 0) == STARTEAM_MAGIC){
iOffsetLengths = 4;
} else if(tvb_get_ntohl(tvb, 20) == STARTEAM_MAGIC){
iOffsetLengths = 24;
}
if(iOffsetLengths != -1){
uint32_t iLengthPacket;
uint32_t iLengthData;
iLengthPacket = tvb_get_letohl(tvb, iOffsetLengths);
iLengthData = tvb_get_letohl(tvb, iOffsetLengths + 4);
if(iLengthPacket == iLengthData){
/* Register this dissector for this conversation */
conversation_t *conversation = NULL;
conversation = find_or_create_conversation(pinfo);
conversation_set_dissector(conversation, starteam_tcp_handle);
/* Dissect the packet */
dissect_starteam(tvb, pinfo, tree, data);
return true;
}
}
}
return false;
}
void
proto_register_starteam(void)
{
static hf_register_info hf[] = {
{ &hf_starteam_mdh_session_tag,
{ "Session tag", "starteam.mdh.stag", FT_UINT32, BASE_DEC, NULL, 0x0, "MDH session tag", HFILL }},
{ &hf_starteam_mdh_ctimestamp,
{ "Client timestamp", "starteam.mdh.ctimestamp", FT_UINT32, BASE_DEC, NULL, 0x0, "MDH client timestamp", HFILL }},
{ &hf_starteam_mdh_flags,
{ "Flags", "starteam.mdh.flags", FT_UINT32, BASE_HEX, NULL, 0x0, "MDH flags", HFILL }},
{ &hf_starteam_mdh_keyid,
{ "Key ID", "starteam.mdh.keyid", FT_UINT32, BASE_HEX, NULL, 0x0, "MDH key ID", HFILL }},
{ &hf_starteam_mdh_reserved,
{ "Reserved", "starteam.mdh.reserved", FT_UINT32, BASE_HEX, NULL, 0x0, "MDH reserved", HFILL }},
{ &hf_starteam_ph_signature,
{ "Signature", "starteam.ph.signature", FT_STRINGZ, BASE_NONE, NULL, 0x0, "PH signature", HFILL }},
{ &hf_starteam_ph_packet_size,
{ "Packet size", "starteam.ph.psize", FT_UINT32, BASE_DEC, NULL, 0x0, "PH packet size", HFILL }},
{ &hf_starteam_ph_data_size,
{ "Data size", "starteam.ph.dsize", FT_UINT32, BASE_DEC, NULL, 0x0, "PH data size", HFILL }},
{ &hf_starteam_ph_data_flags,
{ "Flags", "starteam.ph.flags", FT_UINT32, BASE_HEX, NULL, 0x0, "PH flags", HFILL }},
{ &hf_starteam_id_revision_level,
{ "Revision level", "starteam.id.level", FT_UINT16, BASE_DEC, NULL, 0x0, "ID revision level", HFILL }},
{ &hf_starteam_id_client,
{ "Client ID", "starteam.id.client", FT_STRINGZ, BASE_NONE, NULL, 0x0, "ID client ID", HFILL }},
{ &hf_starteam_id_connect,
{ "Connect ID", "starteam.id.connect", FT_UINT32, BASE_HEX, NULL, 0x0, "ID connect ID", HFILL }},
{ &hf_starteam_id_component,
{ "Component ID", "starteam.id.component", FT_UINT32, BASE_DEC, NULL, 0x0, "ID component ID", HFILL }},
{ &hf_starteam_id_command,
{ "Command ID", "starteam.id.command", FT_UINT32, BASE_DEC|BASE_EXT_STRING, &starteam_opcode_vals_ext, 0x0, "ID command ID", HFILL }},
{ &hf_starteam_id_command_time,
{ "Command time", "starteam.id.commandtime", FT_UINT32, BASE_HEX, NULL, 0x0, "ID command time", HFILL }},
{ &hf_starteam_id_command_userid,
{ "Command user ID", "starteam.id.commanduserid", FT_UINT32, BASE_HEX, NULL, 0x0, "ID command user ID", HFILL }},
{ &hf_starteam_data_data,
{ "Data", "starteam.data", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }}
};
static int *ett[] = {
&ett_starteam,
&ett_starteam_mdh,
&ett_starteam_ph,
&ett_starteam_id,
&ett_starteam_data
};
module_t *starteam_module;
proto_starteam = proto_register_protocol("StarTeam", "StarTeam", "starteam");
proto_register_field_array(proto_starteam, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
starteam_tcp_handle = register_dissector("starteam", dissect_starteam_tcp, proto_starteam);
starteam_module = prefs_register_protocol(proto_starteam, NULL);
prefs_register_bool_preference(starteam_module, "desegment",
"Reassemble StarTeam messages spanning multiple TCP segments",
"Whether the StarTeam dissector should reassemble messages spanning multiple TCP segments."
" To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
&starteam_desegment);
register_init_routine(&starteam_init);
}
void
proto_reg_handoff_starteam(void)
{
heur_dissector_add("tcp", dissect_starteam_heur, "StarTeam over TCP", "starteam_tcp", proto_starteam, HEURISTIC_ENABLE);
}
/*
* Editor modelines - https://www.wireshark.org/tools/modelines.html
*
* Local Variables:
* c-basic-offset: 2
* tab-width: 8
* indent-tabs-mode: nil
* End:
*
* ex: set shiftwidth=2 tabstop=8 expandtab:
* :indentSize=2:tabSize=8:noTabs=true:
*/
|