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