*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
+#include <string.h>
+
#include <glib.h>
#include <epan/packet.h>
/* #include <epan/strutil.h> */
http://developer.apple.com/documentation/Networking/Conceptual/AFP/AFP3_1.pdf
- and in HTML form, at
+ and, in HTML form, at
http://developer.apple.com/documentation/Networking/Conceptual/AFP/index.html
+ Current AFP 3.x specfication, in HTML form, at
+http://developer.apple.com/mac/library/documentation/Networking/Reference/AFP_Reference/Reference/reference.html
- AFP 3.3 specfication in HTML form, at
+ Current AFP 3.x programming guide, in HTML form, at
http://developer.apple.com/mac/library/documentation/Networking/Conceptual/AFP/Introduction/Introduction.html
-
The netatalk source code by Wesley Craig & Adrian Sun
http://netatalk.sf.net
+
+ XXX - distinguish between UTF-8 and Mac proprietary encodings for strings?
+ Does that need a preference in case we didn't see the client and server
+ negotiate that?
*/
/* from netatalk/include/afp.h */
#define AFPTRANS_NONE 0
#define AFP_ADDCMT 56
#define AFP_RMVCMT 57
#define AFP_GETCMT 58
+
#define AFP_ZZZ 122
#define AFP_ADDICON 192
/* AFP 3.0 new calls */
#define AFP_BYTELOCK_EXT 59
-#define AFP_CATSEARCH_EXT 67
-#define AFP_ENUMERATE_EXT 66
#define AFP_READ_EXT 60
#define AFP_WRITE_EXT 61
#define AFP_LOGIN_EXT 63
#define AFP_GETSESSTOKEN 64
#define AFP_DISCTOLDSESS 65
+#define AFP_ENUMERATE_EXT 66
+#define AFP_CATSEARCH_EXT 67
/* AFP 3.1 new calls */
-#define AFP_ENUMERATE_EXT2 68
+#define AFP_ENUMERATE_EXT2 68
/* AFP 3.2 new calls */
-#define AFP_GETEXTATTR 69
-#define AFP_SETEXTATTR 70
-#define AFP_REMOVEATTR 71
-#define AFP_LISTEXTATTR 72
-#define AFP_GETACL 73
-#define AFP_SETACL 74
-#define AFP_ACCESS 75
+#define AFP_GETEXTATTR 69
+#define AFP_SETEXTATTR 70
+#define AFP_REMOVEATTR 71
+#define AFP_LISTEXTATTR 72
+#define AFP_GETACL 73
+#define AFP_SETACL 74
+#define AFP_ACCESS 75
/* AFP 3.2 calls added in 10.5 */
-#define AFP_SPOTLIGHTRPC 76
-#define AFP_SYNCDIR 78
-#define AFP_SYNCFORK 79
+#define AFP_SPOTLIGHTRPC 76
+#define AFP_SYNCDIR 78
+#define AFP_SYNCFORK 79
+
+/* FPSpotlightRPC subcommand codes */
+#define SPOTLIGHT_CMD_GET_VOLPATH 4
+#define SPOTLIGHT_CMD_GET_VOLID 2
+#define SPOTLIGHT_CMD_GET_THREE 3
+
+/* Spotlight epoch is UNIX epoch minus SPOTLIGHT_TIME_DELTA */
+#define SPOTLIGHT_TIME_DELTA G_GINT64_CONSTANT(280878921600U)
/* ----------------------------- */
static int proto_afp = -1;
static int hf_afp_unknown = -1;
static int hf_afp_command = -1; /* CommandCode */
-static int hf_afp_AFPVersion = -1;
+static int hf_afp_Version = -1;
static int hf_afp_UAM = -1;
static int hf_afp_user = -1;
static int hf_afp_passwd = -1;
static int hf_afp_struct_size = -1;
static int hf_afp_struct_size16 = -1;
-static int hf_afp_request_bitmap = -1;
-
static int hf_afp_cat_count = -1;
static int hf_afp_cat_req_matches = -1;
static int hf_afp_cat_position = -1;
static int hf_afp_newline_mask = -1;
static int hf_afp_newline_char = -1;
static int hf_afp_last_written = -1;
-static int hf_afp_actual_count = -1;
static int hf_afp_fork_type = -1;
static int hf_afp_access_mode = -1;
{0, NULL }
};
-const value_string CommandCode_vals[] = {
+static const value_string CommandCode_vals[] = {
{AFP_BYTELOCK, "FPByteRangeLock" },
{AFP_CLOSEVOL, "FPCloseVol" },
{AFP_CLOSEDIR, "FPCloseDir" },
{AFP_RMVCMT, "FPRemoveComment" },
{AFP_GETCMT, "FPGetComment" },
{AFP_BYTELOCK_EXT, "FPByteRangeLockExt" },
- {AFP_CATSEARCH_EXT, "FPCatSearchExt" },
- {AFP_ENUMERATE_EXT, "FPEnumerateExt" },
- {AFP_ENUMERATE_EXT2, "FPEnumerateExt2" },
{AFP_READ_EXT, "FPReadExt" },
{AFP_WRITE_EXT, "FPWriteExt" },
{AFP_LOGIN_EXT, "FPLoginExt" },
{AFP_GETSESSTOKEN, "FPGetSessionToken" },
{AFP_DISCTOLDSESS, "FPDisconnectOldSession" },
- {AFP_ZZZ, "FPZzzzz" },
- {AFP_ADDICON, "FPAddIcon" },
+ {AFP_ENUMERATE_EXT, "FPEnumerateExt" },
+ {AFP_CATSEARCH_EXT, "FPCatSearchExt" },
+ {AFP_ENUMERATE_EXT2, "FPEnumerateExt2" },
{AFP_GETEXTATTR, "FPGetExtAttr" },
{AFP_SETEXTATTR, "FPSetExtAttr" },
{AFP_REMOVEATTR, "FPRemoveExtAttr" },
{AFP_SETACL, "FPSetACL" },
{AFP_ACCESS, "FPAccess" },
{AFP_SPOTLIGHTRPC, "FPSpotlightRPC" },
- {AFP_SYNCFORK, "FPSyncFork" },
{AFP_SYNCDIR, "FPSyncDir" },
+ {AFP_SYNCFORK, "FPSyncFork" },
+ {AFP_ZZZ, "FPZzzzz" },
+ {AFP_ADDICON, "FPAddIcon" },
{0, NULL }
};
+value_string_ext CommandCode_vals_ext = VALUE_STRING_EXT_INIT(CommandCode_vals);
static const value_string unicode_hint_vals[] = {
{ 0, "MacRoman" },
{ 1570, "JIS_X0208_90" },
{ 0, NULL }
};
+static value_string_ext unicode_hint_vals_ext = VALUE_STRING_EXT_INIT(unicode_hint_vals);
/* volume bitmap
from Apple AFP3.0.pdf
static int hf_afp_dir_attribute_BackUpNeeded = -1;
static int hf_afp_dir_attribute_RenameInhibit = -1;
static int hf_afp_dir_attribute_DeleteInhibit = -1;
-static int hf_afp_dir_attribute_SetClear = -1;
static int hf_afp_file_bitmap_Attributes = -1;
static int hf_afp_file_bitmap_ParentDirID = -1;
static int hf_afp_request_bitmap_ExtRsrcForkLen = -1;
static int hf_afp_request_bitmap_PartialNames = -1;
+static int ett_afp_spotlight_queries = -1;
+static int ett_afp_spotlight_query_line = -1;
+static int ett_afp_spotlight_query = -1;
+static int ett_afp_spotlight_data = -1;
+static int ett_afp_spotlight_toc = -1;
+
+static int hf_afp_spotlight_request_flags = -1;
+static int hf_afp_spotlight_request_command = -1;
+static int hf_afp_spotlight_request_reserved = -1;
+static int hf_afp_spotlight_reply_reserved = -1;
+static int hf_afp_spotlight_volpath_server = -1;
+static int hf_afp_spotlight_volpath_client = -1;
+static int hf_afp_spotlight_returncode = -1;
+static int hf_afp_spotlight_volflags = -1;
+static int hf_afp_spotlight_reqlen = -1;
+static int hf_afp_spotlight_uuid = -1;
+static int hf_afp_spotlight_date = -1;
+
static const value_string flag_vals[] = {
{0, "Start" },
{1, "End" },
{5, "Unicode user name to a user UUID" },
{6, "Unicode group name to a group UUID" },
{0, NULL } };
+static value_string_ext map_name_type_vals_ext = VALUE_STRING_EXT_INIT(map_name_type_vals);
static const value_string map_id_type_vals[] = {
{1, "User ID to a Macintosh roman user name" },
{5, "User UUID to a unicode user name" },
{6, "Group UUID to a unicode group name" },
{0, NULL } };
+static value_string_ext map_id_type_vals_ext = VALUE_STRING_EXT_INIT(map_id_type_vals);
/* map_id subfunctions 5,6: reply type */
static const value_string map_id_reply_type_vals[] = {
table 1-7 p. 28
*/
-#define AR_O_SEARCH (1 << 0) /* owner has search access */
-#define AR_O_READ (1 << 1) /* owner has read access */
-#define AR_O_WRITE (1 << 2) /* owner has write access */
+#define AR_O_SEARCH (1 << 0) /* owner has search access */
+#define AR_O_READ (1 << 1) /* owner has read access */
+#define AR_O_WRITE (1 << 2) /* owner has write access */
-#define AR_G_SEARCH (1 << 8) /* group has search access */
-#define AR_G_READ (1 << 9) /* group has read access */
-#define AR_G_WRITE (1 << 10) /* group has write access */
+#define AR_G_SEARCH (1 << 8) /* group has search access */
+#define AR_G_READ (1 << 9) /* group has read access */
+#define AR_G_WRITE (1 << 10) /* group has write access */
-#define AR_E_SEARCH (1 << 16) /* everyone has search access */
-#define AR_E_READ (1 << 17) /* everyone has read access */
-#define AR_E_WRITE (1 << 18) /* everyone has write access */
+#define AR_E_SEARCH (1 << 16) /* everyone has search access */
+#define AR_E_READ (1 << 17) /* everyone has read access */
+#define AR_E_WRITE (1 << 18) /* everyone has write access */
-#define AR_U_SEARCH (1 << 24) /* user has search access */
-#define AR_U_READ (1 << 25) /* user has read access */
-#define AR_U_WRITE (1 << 26) /* user has write access */
+#define AR_U_SEARCH (1 << 24) /* user has search access */
+#define AR_U_READ (1 << 25) /* user has read access */
+#define AR_U_WRITE (1 << 26) /* user has write access */
-#define AR_BLANK (1 << 28) /* Blank Access Privileges (use parent dir privileges) */
-#define AR_U_OWN (1UL << 31) /* user is the owner */
+#define AR_BLANK (1 << 28) /* Blank Access Privileges (use parent dir privileges) */
+#define AR_U_OWN (1UL << 31) /* user is the owner */
static int hf_afp_dir_ar = -1;
static int hf_afp_dir_ar_o_search = -1;
static gint ett_afp_user_bitmap = -1;
static const value_string user_flag_vals[] = {
- {0, "Use user ID" },
- {1, "Default user" },
- {0, NULL } };
+ {0, "Use user ID" },
+ {1, "Default user" },
+ {0, NULL } };
static int hf_afp_message = -1;
static int hf_afp_message_type = -1;
#define kGetKerberosSessionKey 8
static const value_string token_type_vals[] = {
- {kLoginWithoutID, "LoginWithoutID"},
+ {kLoginWithoutID, "LoginWithoutID"},
{kLoginWithID, "LoginWithID"},
{kReconnWithID, "ReconnWithID"},
{kLoginWithTimeAndID, "LoginWithTimeAndID"},
{kGetKerberosSessionKey, "GetKerberosSessionKey"},
{0, NULL } };
+static value_string_ext token_type_vals_ext = VALUE_STRING_EXT_INIT(token_type_vals);
/* AFP 3.2 ACL bitmap */
#define kFileSec_UUID (1 << 0)
static int hf_afp_acl_entrycount = -1;
static int hf_afp_acl_flags = -1;
-static int hf_afp_ace_applicable = -1;
static int hf_afp_ace_flags = -1;
-static int hf_afp_ace_rights = -1;
static int ett_afp_ace_flags = -1;
static int hf_afp_ace_flags_allow = -1;
#define hash_init_count 20
+/* Forward declarations */
+
/* Hash functions */
static gint afp_equal (gconstpointer v, gconstpointer v2);
static guint afp_hash (gconstpointer v);
+static gint dissect_spotlight(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gint offset);
+
typedef struct {
guint32 conversation;
guint16 seq;
static guint Vol; /* volume */
static guint Did; /* parent directory ID */
+static guint64
+spotlight_ntoh64(tvbuff_t *tvb, gint offset, guint encoding)
+{
+ if (encoding == ENC_LITTLE_ENDIAN)
+ return tvb_get_letoh64(tvb, offset);
+ else
+ return tvb_get_ntoh64(tvb, offset);
+}
+
+static gdouble
+spotlight_ntohieee_double(tvbuff_t *tvb, gint offset, guint encoding)
+{
+ if (encoding == ENC_LITTLE_ENDIAN)
+ return tvb_get_letohieee_double(tvb, offset);
+ else
+ return tvb_get_ntohieee_double(tvb, offset);
+}
+
+/*
+* Returns the UTF-16 string encoding, by checking the 2-byte byte order mark.
+* If there is no byte order mark, -1 is returned.
+*/
+static guint
+spotlight_get_utf16_string_encoding(tvbuff_t *tvb, gint offset, gint query_length, guint encoding) {
+ guint utf16_encoding;
+
+ /* check for byte order mark */
+ utf16_encoding = ENC_BIG_ENDIAN;
+ if (query_length >= 2) {
+ guint16 byte_order_mark;
+ if (encoding == ENC_LITTLE_ENDIAN)
+ byte_order_mark = tvb_get_letohs(tvb, offset);
+ else
+ byte_order_mark = tvb_get_ntohs(tvb, offset);
+
+ if (byte_order_mark == 0xFFFE) {
+ utf16_encoding = ENC_BIG_ENDIAN | ENC_UTF_16;
+ }
+ else if (byte_order_mark == 0xFEFF) {
+ utf16_encoding = ENC_LITTLE_ENDIAN | ENC_UTF_16;
+ }
+ }
+
+ return utf16_encoding;
+}
+
/* Hash Functions */
static gint afp_equal (gconstpointer v, gconstpointer v2)
{
/* --------------------------
*/
-#define PAD(x) { proto_tree_add_item(tree, hf_afp_pad, tvb, offset, x, FALSE); offset += x; }
+#define PAD(x) { proto_tree_add_item(tree, hf_afp_pad, tvb, offset, x, ENC_NA); offset += x; }
static guint16
decode_vol_bitmap (proto_tree *tree, tvbuff_t *tvb, gint offset)
bitmap = tvb_get_ntohs(tvb, offset);
if (tree) {
- item = proto_tree_add_item(tree, hf_afp_vol_bitmap, tvb, offset, 2,FALSE);
+ item = proto_tree_add_item(tree, hf_afp_vol_bitmap, tvb, offset, 2, ENC_BIG_ENDIAN);
sub_tree = proto_item_add_subtree(item, ett_afp_vol_bitmap);
- proto_tree_add_item(sub_tree, hf_afp_vol_bitmap_Attributes, tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_vol_bitmap_Signature, tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_vol_bitmap_CreateDate, tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_vol_bitmap_ModDate, tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_vol_bitmap_BackupDate, tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_vol_bitmap_ID, tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_vol_bitmap_BytesFree, tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_vol_bitmap_BytesTotal, tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_vol_bitmap_Name, tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_vol_bitmap_ExtBytesFree, tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_vol_bitmap_ExtBytesTotal, tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_vol_bitmap_BlockSize , tvb, offset, 2,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_vol_bitmap_Attributes, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_vol_bitmap_Signature, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_vol_bitmap_CreateDate, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_vol_bitmap_ModDate, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_vol_bitmap_BackupDate, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_vol_bitmap_ID, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_vol_bitmap_BytesFree, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_vol_bitmap_BytesTotal, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_vol_bitmap_Name, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_vol_bitmap_ExtBytesFree, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_vol_bitmap_ExtBytesTotal, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_vol_bitmap_BlockSize , tvb, offset, 2, ENC_BIG_ENDIAN);
}
return bitmap;
bitmap = tvb_get_ntohs(tvb, offset);
if (tree) {
- item = proto_tree_add_item(tree, hf_afp_vol_attribute, tvb, offset, 2,FALSE);
+ item = proto_tree_add_item(tree, hf_afp_vol_attribute, tvb, offset, 2, ENC_BIG_ENDIAN);
sub_tree = proto_item_add_subtree(item, ett_afp_vol_attribute);
- proto_tree_add_item(sub_tree, hf_afp_vol_attribute_ReadOnly ,tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_vol_attribute_HasVolumePassword ,tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_vol_attribute_SupportsFileIDs ,tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_vol_attribute_SupportsCatSearch ,tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_vol_attribute_SupportsBlankAccessPrivs,tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_vol_attribute_SupportsUnixPrivs ,tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_vol_attribute_SupportsUTF8Names ,tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_vol_attribute_NoNetworkUserID ,tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_vol_attribute_DefaultPrivsFromParent ,tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_vol_attribute_NoExchangeFiles ,tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_vol_attribute_SupportsExtAttrs ,tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_vol_attribute_SupportsACLs ,tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_vol_attribute_CaseSensitive ,tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_vol_attribute_SupportsTMLockSteal ,tvb, offset, 2,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_vol_attribute_ReadOnly ,tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_vol_attribute_HasVolumePassword ,tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_vol_attribute_SupportsFileIDs ,tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_vol_attribute_SupportsCatSearch ,tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_vol_attribute_SupportsBlankAccessPrivs,tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_vol_attribute_SupportsUnixPrivs ,tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_vol_attribute_SupportsUTF8Names ,tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_vol_attribute_NoNetworkUserID ,tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_vol_attribute_DefaultPrivsFromParent ,tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_vol_attribute_NoExchangeFiles ,tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_vol_attribute_SupportsExtAttrs ,tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_vol_attribute_SupportsACLs ,tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_vol_attribute_CaseSensitive ,tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_vol_attribute_SupportsTMLockSteal ,tvb, offset, 2, ENC_BIG_ENDIAN);
}
return bitmap;
offset += 2;
}
if ((bitmap & kFPVolSignatureBit)) {
- proto_tree_add_item(tree, hf_afp_vol_signature,tvb, offset, 2, FALSE);
+ proto_tree_add_item(tree, hf_afp_vol_signature,tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
}
if ((bitmap & kFPVolCreateDateBit)) {
offset += 4;
}
if ((bitmap & kFPVolIDBit)) {
- proto_tree_add_item(tree, hf_afp_vol_id, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_vol_id, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
}
if ((bitmap & kFPVolBytesFreeBit)) {
- proto_tree_add_item(tree, hf_afp_vol_bytes_free,tvb, offset, 4, FALSE);
+ proto_tree_add_item(tree, hf_afp_vol_bytes_free,tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
}
if ((bitmap & kFPVolBytesTotalBit)) {
- proto_tree_add_item(tree, hf_afp_vol_bytes_total,tvb, offset, 4, FALSE);
+ proto_tree_add_item(tree, hf_afp_vol_bytes_total,tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
}
if ((bitmap & kFPVolNameBit)) {
nameoff = tvb_get_ntohs(tvb, offset);
- proto_tree_add_item(tree, hf_afp_vol_name_offset,tvb, offset, 2, FALSE);
+ proto_tree_add_item(tree, hf_afp_vol_name_offset,tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
}
if ((bitmap & kFPVolExtBytesFreeBit)) {
- proto_tree_add_item(tree, hf_afp_vol_ex_bytes_free,tvb, offset, 8, FALSE);
+ proto_tree_add_item(tree, hf_afp_vol_ex_bytes_free,tvb, offset, 8, ENC_BIG_ENDIAN);
offset += 8;
}
if ((bitmap & kFPVolExtBytesTotalBit)) {
- proto_tree_add_item(tree, hf_afp_vol_ex_bytes_total,tvb, offset, 8, FALSE);
+ proto_tree_add_item(tree, hf_afp_vol_ex_bytes_total,tvb, offset, 8, ENC_BIG_ENDIAN);
offset += 8;
}
if ((bitmap & kFPVolBlockSizeBit)) {
- proto_tree_add_item(tree, hf_afp_vol_block_size,tvb, offset, 4, FALSE);
+ proto_tree_add_item(tree, hf_afp_vol_block_size,tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
}
if (nameoff) {
guint8 len;
len = tvb_get_guint8(tvb, offset);
- proto_tree_add_item(tree, hf_afp_vol_name, tvb, offset, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_vol_name, tvb, offset, 1, ENC_UTF_8|ENC_BIG_ENDIAN);
offset += len +1;
}
bitmap = tvb_get_ntohs(tvb, offset);
if (tree) {
- item = proto_tree_add_item(tree, hf_afp_file_bitmap, tvb, offset, 2,FALSE);
+ item = proto_tree_add_item(tree, hf_afp_file_bitmap, tvb, offset, 2, ENC_BIG_ENDIAN);
sub_tree = proto_item_add_subtree(item, ett_afp_file_bitmap);
- proto_tree_add_item(sub_tree, hf_afp_file_bitmap_Attributes , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_file_bitmap_ParentDirID , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_file_bitmap_CreateDate , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_file_bitmap_ModDate , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_file_bitmap_BackupDate , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_file_bitmap_FinderInfo , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_file_bitmap_LongName , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_file_bitmap_ShortName , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_file_bitmap_NodeID , tvb, offset, 2,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_file_bitmap_Attributes , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_file_bitmap_ParentDirID , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_file_bitmap_CreateDate , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_file_bitmap_ModDate , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_file_bitmap_BackupDate , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_file_bitmap_FinderInfo , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_file_bitmap_LongName , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_file_bitmap_ShortName , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_file_bitmap_NodeID , tvb, offset, 2, ENC_BIG_ENDIAN);
- proto_tree_add_item(sub_tree, hf_afp_file_bitmap_DataForkLen , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_file_bitmap_RsrcForkLen , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_file_bitmap_ExtDataForkLen , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_file_bitmap_LaunchLimit , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_file_bitmap_UTF8Name , tvb, offset, 2,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_file_bitmap_DataForkLen , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_file_bitmap_RsrcForkLen , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_file_bitmap_ExtDataForkLen , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_file_bitmap_LaunchLimit , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_file_bitmap_UTF8Name , tvb, offset, 2, ENC_BIG_ENDIAN);
- proto_tree_add_item(sub_tree, hf_afp_file_bitmap_ExtRsrcForkLen , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_file_bitmap_UnixPrivs , tvb, offset, 2,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_file_bitmap_ExtRsrcForkLen , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_file_bitmap_UnixPrivs , tvb, offset, 2, ENC_BIG_ENDIAN);
}
return bitmap;
item = proto_tree_add_text(tree, tvb, offset, 2,
"File Attributes: 0x%04x", attribute);
sub_tree = proto_item_add_subtree(item, ett_afp_file_attribute);
- proto_tree_add_item(sub_tree, hf_afp_file_attribute_Invisible , tvb, offset, 2,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_file_attribute_Invisible , tvb, offset, 2, ENC_BIG_ENDIAN);
if (!shared)
- proto_tree_add_item(sub_tree, hf_afp_file_attribute_MultiUser , tvb, offset, 2,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_file_attribute_MultiUser , tvb, offset, 2, ENC_BIG_ENDIAN);
- proto_tree_add_item(sub_tree, hf_afp_file_attribute_System , tvb, offset, 2,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_file_attribute_System , tvb, offset, 2, ENC_BIG_ENDIAN);
if (!shared) {
- proto_tree_add_item(sub_tree, hf_afp_file_attribute_DAlreadyOpen , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_file_attribute_RAlreadyOpen , tvb, offset, 2,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_file_attribute_DAlreadyOpen , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_file_attribute_RAlreadyOpen , tvb, offset, 2, ENC_BIG_ENDIAN);
}
/* writeinhibit is file only but Macs are setting it with FPSetFileDirParms too */
- proto_tree_add_item(sub_tree, hf_afp_file_attribute_WriteInhibit , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_file_attribute_BackUpNeeded , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_file_attribute_RenameInhibit, tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_file_attribute_DeleteInhibit, tvb, offset, 2,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_file_attribute_WriteInhibit , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_file_attribute_BackUpNeeded , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_file_attribute_RenameInhibit, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_file_attribute_DeleteInhibit, tvb, offset, 2, ENC_BIG_ENDIAN);
if (!shared)
- proto_tree_add_item(sub_tree, hf_afp_file_attribute_CopyProtect , tvb, offset, 2,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_file_attribute_CopyProtect , tvb, offset, 2, ENC_BIG_ENDIAN);
- proto_tree_add_item(sub_tree, hf_afp_file_attribute_SetClear , tvb, offset, 2,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_file_attribute_SetClear , tvb, offset, 2, ENC_BIG_ENDIAN);
return(attribute);
}
proto_item *item;
if (tree) {
- item = proto_tree_add_item(tree, hf, tvb, offset, 4, FALSE);
+ item = proto_tree_add_item(tree, hf, tvb, offset, 4, ENC_BIG_ENDIAN);
sub_tree = proto_item_add_subtree(item, ett_afp_dir_ar);
- proto_tree_add_item(sub_tree, hf_afp_dir_ar_o_search, tvb, offset, 4, FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_ar_o_read , tvb, offset, 4, FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_ar_o_write , tvb, offset, 4, FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_dir_ar_o_search, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_ar_o_read , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_ar_o_write , tvb, offset, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item(sub_tree, hf_afp_dir_ar_g_search, tvb, offset, 4, FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_ar_g_read , tvb, offset, 4, FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_ar_g_write , tvb, offset, 4, FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_dir_ar_g_search, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_ar_g_read , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_ar_g_write , tvb, offset, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item(sub_tree, hf_afp_dir_ar_e_search, tvb, offset, 4, FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_ar_e_read , tvb, offset, 4, FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_ar_e_write , tvb, offset, 4, FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_dir_ar_e_search, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_ar_e_read , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_ar_e_write , tvb, offset, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item(sub_tree, hf_afp_dir_ar_u_search, tvb, offset, 4, FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_ar_u_read , tvb, offset, 4, FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_ar_u_write , tvb, offset, 4, FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_dir_ar_u_search, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_ar_u_read , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_ar_u_write , tvb, offset, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item(sub_tree, hf_afp_dir_ar_blank , tvb, offset, 4, FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_ar_u_own , tvb, offset, 4, FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_dir_ar_blank , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_ar_u_own , tvb, offset, 4, ENC_BIG_ENDIAN);
}
}
"UNIX privileges");
sub_tree = proto_item_add_subtree(item, ett_afp_unix_privs);
- proto_tree_add_item(sub_tree, hf_afp_unix_privs_uid, tvb, offset, 4, FALSE);
- proto_tree_add_item(sub_tree, hf_afp_unix_privs_gid, tvb, offset+4, 4, FALSE);
- proto_tree_add_item(sub_tree, hf_afp_unix_privs_permissions, tvb, offset+8, 4, FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_unix_privs_uid, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_unix_privs_gid, tvb, offset+4, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_unix_privs_permissions, tvb, offset+8, 4, ENC_BIG_ENDIAN);
decode_access_rights(sub_tree, tvb, hf_afp_unix_privs_ua_permissions, offset+12);
}
}
guint8 len;
lnameoff = tvb_get_ntohs(tvb, offset);
- proto_tree_add_item(tree, hf_afp_long_name_offset,tvb, offset, 2, FALSE);
+ proto_tree_add_item(tree, hf_afp_long_name_offset,tvb, offset, 2, ENC_BIG_ENDIAN);
if (lnameoff) {
tp_ofs = lnameoff +org_offset;
len = tvb_get_guint8(tvb, tp_ofs);
- proto_tree_add_item(tree, hf_afp_path_len, tvb, tp_ofs, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_path_len, tvb, tp_ofs, 1, ENC_BIG_ENDIAN);
tp_ofs++;
- proto_tree_add_item(tree, hf_afp_path_name, tvb, tp_ofs, len,FALSE);
+ proto_tree_add_item(tree, hf_afp_path_name, tvb, tp_ofs, len, ENC_UTF_8|ENC_NA);
tp_ofs += len;
}
return tp_ofs;
guint16 len;
unameoff = tvb_get_ntohs(tvb, offset);
- proto_tree_add_item(tree, hf_afp_unicode_name_offset,tvb, offset, 2, FALSE);
+ proto_tree_add_item(tree, hf_afp_unicode_name_offset,tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
if (unameoff) {
/* FIXME AFP3.x reuses PDINFO bit for UTF8.
else if (tp_ofs < offset) {
tp_ofs = offset;
}
- proto_tree_add_item( tree, hf_afp_path_unicode_hint, tvb, tp_ofs, 4,FALSE);
+ proto_tree_add_item( tree, hf_afp_path_unicode_hint, tvb, tp_ofs, 4, ENC_BIG_ENDIAN);
tp_ofs += 4;
len = tvb_get_ntohs(tvb, tp_ofs);
- proto_tree_add_item( tree, hf_afp_path_unicode_len, tvb, tp_ofs, 2,FALSE);
+ proto_tree_add_item( tree, hf_afp_path_unicode_len, tvb, tp_ofs, 2, ENC_BIG_ENDIAN);
tp_ofs += 2;
- proto_tree_add_item(tree, hf_afp_path_name, tvb, tp_ofs, len,FALSE);
+ proto_tree_add_item(tree, hf_afp_path_name, tvb, tp_ofs, len, ENC_UTF_8|ENC_NA);
tp_ofs += len;
}
return tp_ofs;
offset += 2;
}
if ((bitmap & kFPParentDirIDBit)) {
- proto_tree_add_item(tree, hf_afp_did, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_did, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
}
if ((bitmap & kFPCreateDateBit)) {
offset += 4;
}
if ((bitmap & kFPFinderInfoBit)) {
- proto_tree_add_item(tree, hf_afp_finder_info,tvb, offset, 32, FALSE);
+ proto_tree_add_item(tree, hf_afp_finder_info,tvb, offset, 32, ENC_NA);
offset += 32;
}
if ((bitmap & kFPLongNameBit)) {
}
if ((bitmap & kFPShortNameBit)) {
/* snameoff = tvb_get_ntohs(tvb, offset); */
- proto_tree_add_item(tree, hf_afp_short_name_offset,tvb, offset, 2, FALSE);
+ proto_tree_add_item(tree, hf_afp_short_name_offset,tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
}
if ((bitmap & kFPNodeIDBit)) {
- proto_tree_add_item(tree, hf_afp_file_id, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_file_id, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
}
if ((bitmap & kFPDataForkLenBit)) {
- proto_tree_add_item(tree, hf_afp_file_DataForkLen, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_file_DataForkLen, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
}
if ((bitmap & kFPRsrcForkLenBit)) {
- proto_tree_add_item(tree, hf_afp_file_RsrcForkLen, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_file_RsrcForkLen, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
}
if ((bitmap & kFPExtDataForkLenBit)) {
- proto_tree_add_item(tree, hf_afp_file_ExtDataForkLen, tvb, offset, 8,FALSE);
+ proto_tree_add_item(tree, hf_afp_file_ExtDataForkLen, tvb, offset, 8, ENC_BIG_ENDIAN);
offset += 8;
}
}
if ((bitmap & kFPExtRsrcForkLenBit)) {
- proto_tree_add_item(tree, hf_afp_file_ExtRsrcForkLen, tvb, offset, 8,FALSE);
+ proto_tree_add_item(tree, hf_afp_file_ExtRsrcForkLen, tvb, offset, 8, ENC_BIG_ENDIAN);
offset += 8;
}
bitmap = tvb_get_ntohs(tvb, offset);
if (tree) {
- item = proto_tree_add_item(tree, hf_afp_dir_bitmap, tvb, offset, 2,FALSE);
+ item = proto_tree_add_item(tree, hf_afp_dir_bitmap, tvb, offset, 2, ENC_BIG_ENDIAN);
sub_tree = proto_item_add_subtree(item, ett_afp_dir_bitmap);
- proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_Attributes , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_ParentDirID , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_CreateDate , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_ModDate , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_BackupDate , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_FinderInfo , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_LongName , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_ShortName , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_NodeID , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_OffspringCount , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_OwnerID , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_GroupID , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_AccessRights , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_UTF8Name , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_UnixPrivs , tvb, offset, 2,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_Attributes , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_ParentDirID , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_CreateDate , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_ModDate , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_BackupDate , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_FinderInfo , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_LongName , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_ShortName , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_NodeID , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_OffspringCount , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_OwnerID , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_GroupID , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_AccessRights , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_UTF8Name , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_bitmap_UnixPrivs , tvb, offset, 2, ENC_BIG_ENDIAN);
}
return bitmap;
"Directory Attributes: 0x%04x", attribute);
sub_tree = proto_item_add_subtree(item, ett_afp_dir_attribute);
- proto_tree_add_item(sub_tree, hf_afp_dir_attribute_Invisible , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_attribute_IsExpFolder , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_attribute_System , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_attribute_Mounted , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_attribute_InExpFolder , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_attribute_BackUpNeeded , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_attribute_RenameInhibit, tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_dir_attribute_DeleteInhibit, tvb, offset, 2,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_dir_attribute_Invisible , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_attribute_IsExpFolder , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_attribute_System , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_attribute_Mounted , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_attribute_InExpFolder , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_attribute_BackUpNeeded , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_attribute_RenameInhibit, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_dir_attribute_DeleteInhibit, tvb, offset, 2, ENC_BIG_ENDIAN);
}
return(attribute);
offset += 2;
}
if ((bitmap & kFPParentDirIDBit)) {
- proto_tree_add_item(tree, hf_afp_did, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_did, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
}
if ((bitmap & kFPCreateDateBit)) {
offset += 4;
}
if ((bitmap & kFPFinderInfoBit)) {
- proto_tree_add_item(tree, hf_afp_finder_info,tvb, offset, 32, FALSE);
+ proto_tree_add_item(tree, hf_afp_finder_info,tvb, offset, 32, ENC_NA);
offset += 32;
}
if ((bitmap & kFPLongNameBit)) {
}
if ((bitmap & kFPShortNameBit)) {
/* snameoff = tvb_get_ntohs(tvb, offset); */
- proto_tree_add_item(tree, hf_afp_short_name_offset,tvb, offset, 2, FALSE);
+ proto_tree_add_item(tree, hf_afp_short_name_offset,tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
}
if ((bitmap & kFPNodeIDBit)) {
- proto_tree_add_item(tree, hf_afp_file_id, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_file_id, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
}
if ((bitmap & kFPOffspringCountBit)) {
- proto_tree_add_item(tree, hf_afp_dir_offspring, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_dir_offspring, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2; /* error in AFP3.0.pdf */
}
if ((bitmap & kFPOwnerIDBit)) {
- proto_tree_add_item(tree, hf_afp_dir_OwnerID, tvb, offset, 4, FALSE);
+ proto_tree_add_item(tree, hf_afp_dir_OwnerID, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
}
if ((bitmap & kFPGroupIDBit)) {
- proto_tree_add_item(tree, hf_afp_dir_GroupID, tvb, offset, 4, FALSE);
+ proto_tree_add_item(tree, hf_afp_dir_GroupID, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
}
if ((bitmap & kFPAccessRightsBit)) {
return name;
}
+/* -------------------------- */
+static gint
+decode_vol(proto_tree *tree, tvbuff_t *tvb, gint offset)
+{
+ Vol = tvb_get_ntohs(tvb, offset);
+ proto_tree_add_item(tree, hf_afp_vol_id, tvb, offset, 2, ENC_BIG_ENDIAN);
+ return offset + 2;
+}
+
/* -------------------------- */
static gint
decode_vol_did(proto_tree *tree, tvbuff_t *tvb, gint offset)
{
Vol = tvb_get_ntohs(tvb, offset);
- proto_tree_add_item(tree, hf_afp_vol_id, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_vol_id, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
Did = tvb_get_ntohl(tvb, offset);
- proto_tree_add_item(tree, hf_afp_did, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_did, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
return offset;
}
item = proto_tree_add_text(tree, tvb, offset, len +header, label, name);
sub_tree = proto_item_add_subtree(item, ett_afp_path_name);
- proto_tree_add_item( sub_tree, hf_afp_path_type, tvb, offset, 1,FALSE);
+ proto_tree_add_item( sub_tree, hf_afp_path_type, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
if (type == 3) {
- proto_tree_add_item( sub_tree, hf_afp_path_unicode_hint, tvb, offset, 4,FALSE);
+ proto_tree_add_item( sub_tree, hf_afp_path_unicode_hint, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
- proto_tree_add_item( sub_tree, hf_afp_path_unicode_len, tvb, offset, 2,FALSE);
+ proto_tree_add_item( sub_tree, hf_afp_path_unicode_len, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
}
else {
- proto_tree_add_item( sub_tree, hf_afp_path_len, tvb, offset, 1,FALSE);
+ proto_tree_add_item( sub_tree, hf_afp_path_len, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
}
if (!tree)
return offset;
- proto_tree_add_item(tree, hf_afp_vol_name, tvb, offset, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_vol_name, tvb, offset, 1, ENC_UTF_8|ENC_BIG_ENDIAN);
offset += len +1;
len = tvb_reported_length_remaining(tvb,offset);
if (len >= 8) {
- /* optionnal password */
- proto_tree_add_item(tree, hf_afp_passwd, tvb, offset, 8,FALSE);
+ /* optional password */
+ proto_tree_add_item(tree, hf_afp_passwd, tvb, offset, 8, ENC_UTF_8|ENC_NA);
offset += 8;
}
return offset;
ti = proto_tree_add_text(tree, tvb, offset , 1,"Flags : 0x%02x", flag);
flag_tree = proto_item_add_subtree(ti, ett_afp_vol_flag);
- proto_tree_add_item(flag_tree, hf_afp_vol_flag_passwd, tvb, offset, 1,FALSE);
- proto_tree_add_item(flag_tree, hf_afp_vol_flag_has_config, tvb, offset, 1,FALSE);
+ proto_tree_add_item(flag_tree, hf_afp_vol_flag_passwd, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(flag_tree, hf_afp_vol_flag_has_config, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
len = tvb_get_guint8(tvb, offset) +1;
proto_item_set_text(item, "%s", rep);
proto_item_set_len(item, len +1);
- proto_tree_add_item(tree, hf_afp_vol_name, tvb, offset, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_vol_name, tvb, offset, 1, ENC_UTF_8|ENC_BIG_ENDIAN);
offset += len;
}
return offset;
PAD(1);
- proto_tree_add_item(tree, hf_afp_vol_id, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_vol_id, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
return offset;
}
proto_tree *sub_tree = NULL;
proto_item *item;
- proto_tree_add_item(tree, hf_afp_fork_type, tvb, offset, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_fork_type, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
offset = decode_vol_did(tree, tvb, offset);
decode_file_bitmap(tree, tvb, offset);
offset += 2;
if (tree) {
- item = proto_tree_add_item(tree, hf_afp_access_mode, tvb, offset, 2,FALSE);
+ item = proto_tree_add_item(tree, hf_afp_access_mode, tvb, offset, 2, ENC_BIG_ENDIAN);
sub_tree = proto_item_add_subtree(item, ett_afp_access_mode);
- proto_tree_add_item(sub_tree, hf_afp_access_read , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_access_write , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_access_deny_read , tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_access_deny_write, tvb, offset, 2,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_access_read , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_access_write , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_access_deny_read , tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_access_deny_write, tvb, offset, 2, ENC_BIG_ENDIAN);
}
offset += 2;
offset += 2;
add_info_fork(tvb, pinfo, offset);
- proto_tree_add_item(tree, hf_afp_ofork, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_ofork, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
offset = parse_file_bitmap(tree, tvb, offset, f_bitmap,0);
PAD(1);
offset = decode_vol_did_file_dir_bitmap(tree, tvb, offset);
- proto_tree_add_item(tree, hf_afp_req_count, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_req_count, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
- proto_tree_add_item(tree, hf_afp_start_index32, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_start_index32, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
- proto_tree_add_item(tree, hf_afp_max_reply_size32, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_max_reply_size32, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
offset = decode_name(tree, pinfo, tvb, offset);
PAD(1);
offset = decode_vol_did_file_dir_bitmap(tree, tvb, offset);
- proto_tree_add_item(tree, hf_afp_req_count, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_req_count, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
- proto_tree_add_item(tree, hf_afp_start_index, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_start_index, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
- proto_tree_add_item(tree, hf_afp_max_reply_size, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_max_reply_size, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
offset = decode_name(tree, pinfo, tvb, offset);
tree = proto_item_add_subtree(item, ett_afp_enumerate_line);
}
if (ext) {
- proto_tree_add_item(tree, hf_afp_struct_size16, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_struct_size16, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
}
else {
- proto_tree_add_item(tree, hf_afp_struct_size, tvb, offset, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_struct_size, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
}
- proto_tree_add_item(tree, hf_afp_file_flag, tvb, offset, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_file_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
if (ext) {
PAD(1);
count = tvb_get_ntohs(tvb, offset);
if (tree) {
- item = proto_tree_add_item(tree, hf_afp_req_count, tvb, offset, 2,FALSE);
+ item = proto_tree_add_item(tree, hf_afp_req_count, tvb, offset, 2, ENC_BIG_ENDIAN);
sub_tree = proto_item_add_subtree(item, ett_afp_enumerate);
}
offset += 2;
tree = proto_item_add_subtree(item, ett_afp_cat_spec);
if (ext) {
- proto_tree_add_item(tree, hf_afp_struct_size16, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_struct_size16, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
}
else {
- proto_tree_add_item(tree, hf_afp_struct_size, tvb, offset, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_struct_size, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
PAD(1);
}
- offset = parse_file_bitmap(tree, tvb, offset, (guint16) bitmap,0);
+ parse_file_bitmap(tree, tvb, offset, (guint16) bitmap,0);
offset = org +size;
return offset;
return offset;
PAD(1);
- proto_tree_add_item(ptree, hf_afp_vol_id, tvb, offset, 2,FALSE);
+ proto_tree_add_item(ptree, hf_afp_vol_id, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
- proto_tree_add_item(ptree, hf_afp_cat_req_matches, tvb, offset, 4,FALSE);
+ proto_tree_add_item(ptree, hf_afp_cat_req_matches, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
- proto_tree_add_item(ptree, hf_afp_reserved, tvb, offset, 4,FALSE);
+ proto_tree_add_item(ptree, hf_afp_reserved, tvb, offset, 4, ENC_NA);
offset += 4;
- proto_tree_add_item(ptree, hf_afp_cat_position, tvb, offset, 16,FALSE);
+ proto_tree_add_item(ptree, hf_afp_cat_position, tvb, offset, 16, ENC_NA);
offset += 16;
f_bitmap = decode_file_bitmap(ptree, tvb, offset);
r_bitmap = tvb_get_ntohl(tvb, offset);
/* Already checked this above: if (ptree) */ {
- item = proto_tree_add_item(ptree, hf_afp_file_bitmap, tvb, offset, 4,FALSE);
+ item = proto_tree_add_item(ptree, hf_afp_file_bitmap, tvb, offset, 4, ENC_BIG_ENDIAN);
sub_tree = proto_item_add_subtree(item, ett_afp_cat_r_bitmap);
- proto_tree_add_item(sub_tree, hf_afp_request_bitmap_Attributes , tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_request_bitmap_ParentDirID , tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_request_bitmap_CreateDate , tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_request_bitmap_ModDate , tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_request_bitmap_BackupDate , tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_request_bitmap_FinderInfo , tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_request_bitmap_LongName , tvb, offset, 4,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_request_bitmap_Attributes , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_request_bitmap_ParentDirID, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_request_bitmap_CreateDate , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_request_bitmap_ModDate , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_request_bitmap_BackupDate , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_request_bitmap_FinderInfo , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_request_bitmap_LongName , tvb, offset, 4, ENC_BIG_ENDIAN);
if (d_bitmap == 0) {
/* Only for file-only searches */
- proto_tree_add_item(sub_tree, hf_afp_request_bitmap_DataForkLen , tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_request_bitmap_RsrcForkLen , tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_request_bitmap_ExtDataForkLen , tvb, offset, 4,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_request_bitmap_DataForkLen , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_request_bitmap_RsrcForkLen , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_request_bitmap_ExtDataForkLen , tvb, offset, 4, ENC_BIG_ENDIAN);
}
if (f_bitmap == 0) {
/* Only for directory-only searches */
- proto_tree_add_item(sub_tree, hf_afp_request_bitmap_OffspringCount , tvb, offset, 4,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_request_bitmap_OffspringCount , tvb, offset, 4, ENC_BIG_ENDIAN);
}
- proto_tree_add_item(sub_tree, hf_afp_request_bitmap_UTF8Name , tvb, offset, 4,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_request_bitmap_UTF8Name , tvb, offset, 4, ENC_BIG_ENDIAN);
if (d_bitmap == 0) {
/* Only for file-only searches */
- proto_tree_add_item(sub_tree, hf_afp_request_bitmap_ExtRsrcForkLen , tvb, offset, 4,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_request_bitmap_ExtRsrcForkLen , tvb, offset, 4, ENC_BIG_ENDIAN);
}
- proto_tree_add_item(sub_tree, hf_afp_request_bitmap_PartialNames , tvb, offset, 4,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_request_bitmap_PartialNames , tvb, offset, 4, ENC_BIG_ENDIAN);
}
offset += 4;
guint16 d_bitmap;
int count;
- proto_tree_add_item(tree, hf_afp_cat_position, tvb, offset, 16,FALSE);
+ proto_tree_add_item(tree, hf_afp_cat_position, tvb, offset, 16, ENC_NA);
offset += 16;
f_bitmap = decode_file_bitmap(tree, tvb, offset);
count = tvb_get_ntohl(tvb, offset);
if (tree) {
- item = proto_tree_add_item(tree, hf_afp_cat_count, tvb, offset, 4,FALSE);
+ item = proto_tree_add_item(tree, hf_afp_cat_count, tvb, offset, 4, ENC_BIG_ENDIAN);
sub_tree = proto_item_add_subtree(item, ett_afp_cat_search);
}
offset += 4;
PAD(1)
add_info_vol(tvb, pinfo, offset);
- proto_tree_add_item(tree, hf_afp_vol_id, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_vol_id, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
decode_vol_bitmap(tree, tvb, offset);
PAD(1)
add_info_vol(tvb, pinfo, offset);
- proto_tree_add_item(tree, hf_afp_vol_id, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_vol_id, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
bitmap = decode_vol_bitmap(tree, tvb, offset);
PAD(1);
len = 8; /* tvb_strsize(tvb, offset);*/
- proto_tree_add_item(tree, hf_afp_passwd, tvb, offset, len,FALSE);
+ proto_tree_add_item(tree, hf_afp_passwd, tvb, offset, len, ENC_UTF_8|ENC_NA);
offset += len;
}
else if (!g_ascii_strncasecmp(uam, "DHCAST128", len_uam)) {
PAD(1);
len = 16;
- proto_tree_add_item(tree, hf_afp_random, tvb, offset, len,FALSE);
+ proto_tree_add_item(tree, hf_afp_random, tvb, offset, len, ENC_NA);
offset += len;
}
else if (!g_ascii_strncasecmp(uam, "2-Way Randnum exchange", len_uam)) {
const guint8 *uam;
len = tvb_get_guint8(tvb, offset);
- proto_tree_add_item(tree, hf_afp_AFPVersion, tvb, offset, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_Version, tvb, offset, 1, ENC_UTF_8|ENC_BIG_ENDIAN);
offset += len +1;
len_uam = tvb_get_guint8(tvb, offset);
- uam = tvb_get_ptr(tvb, offset +1, len_uam);
- proto_tree_add_item(tree, hf_afp_UAM, tvb, offset, 1,FALSE);
+ uam = tvb_get_ephemeral_string(tvb, offset +1, len_uam);
+ proto_tree_add_item(tree, hf_afp_UAM, tvb, offset, 1, ENC_UTF_8|ENC_BIG_ENDIAN);
offset += len_uam +1;
if (!g_ascii_strncasecmp(uam, "No User Authent", len_uam)) {
}
len = tvb_get_guint8(tvb, offset);
- proto_tree_add_item(tree, hf_afp_user, tvb, offset, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_user, tvb, offset, 1, ENC_UTF_8|ENC_BIG_ENDIAN);
offset += len +1;
return decode_uam_parameters(uam, len_uam, tvb, tree, offset);
int len;
int len_uam;
const guint8 *uam;
- guint8 type;
-
- type = tvb_get_guint8(tvb, offset);
+ guint8 path_type;
PAD(1);
- proto_tree_add_item(tree, hf_afp_login_flags, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_login_flags, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
len = tvb_get_guint8(tvb, offset);
- proto_tree_add_item(tree, hf_afp_AFPVersion, tvb, offset, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_Version, tvb, offset, 1, ENC_UTF_8|ENC_BIG_ENDIAN);
offset += len +1;
len_uam = tvb_get_guint8(tvb, offset);
- uam = tvb_get_ptr(tvb, offset +1, len_uam);
- proto_tree_add_item(tree, hf_afp_UAM, tvb, offset, 1,FALSE);
+ uam = tvb_get_ephemeral_string(tvb, offset +1, len_uam);
+ proto_tree_add_item(tree, hf_afp_UAM, tvb, offset, 1, ENC_UTF_8|ENC_BIG_ENDIAN);
offset += len_uam +1;
- type = tvb_get_guint8(tvb, offset);
- proto_tree_add_item(tree, hf_afp_user_type, tvb, offset, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_user_type, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
/* only type 3 */
len = tvb_get_ntohs(tvb, offset);
- proto_tree_add_item(tree, hf_afp_user_len, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_user_len, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
- proto_tree_add_item(tree, hf_afp_user_name, tvb, offset, len,FALSE);
+ proto_tree_add_item(tree, hf_afp_user_name, tvb, offset, len, ENC_UTF_8|ENC_NA);
offset += len;
/* directory service */
- type = tvb_get_guint8(tvb, offset);
- proto_tree_add_item(tree, hf_afp_path_type, tvb, offset, 1,FALSE);
+ path_type = tvb_get_guint8(tvb, offset);
+ proto_tree_add_item(tree, hf_afp_path_type, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
/* FIXME use 16 bit len + unicode from smb dissector */
- switch (type) {
+ switch (path_type) {
case 1:
case 2:
len = tvb_get_guint8(tvb, offset);
- proto_tree_add_item(tree, hf_afp_path_len, tvb, offset, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_path_len, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
- proto_tree_add_item(tree, hf_afp_path_name, tvb, offset, len,FALSE);
+ proto_tree_add_item(tree, hf_afp_path_name, tvb, offset, len, ENC_UTF_8|ENC_NA);
offset += len;
break;
case 3:
len = tvb_get_ntohs(tvb, offset);
- proto_tree_add_item( tree, hf_afp_path_unicode_len, tvb, offset, 2,FALSE);
+ proto_tree_add_item( tree, hf_afp_path_unicode_len, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
- proto_tree_add_item(tree, hf_afp_path_name, tvb, offset, len,FALSE);
+ proto_tree_add_item(tree, hf_afp_path_name, tvb, offset, len, ENC_UTF_8|ENC_NA);
offset += len;
break;
default:
int param;
- proto_tree_add_item(tree, hf_afp_flag, tvb, offset, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
add_info_fork(tvb, pinfo, offset);
- proto_tree_add_item(tree, hf_afp_ofork, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_ofork, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
- proto_tree_add_item(tree, hf_afp_offset, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_offset, tvb, offset, 4, ENC_BIG_ENDIAN);
param = tvb_get_ntohl(tvb, offset);
col_append_fstr(pinfo->cinfo, COL_INFO, " Offset=%d", param);
offset += 4;
- proto_tree_add_item(tree, hf_afp_rw_count, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_rw_count, tvb, offset, 4, ENC_BIG_ENDIAN);
param = tvb_get_ntohl(tvb, offset);
col_append_fstr(pinfo->cinfo, COL_INFO, " Size=%d", param);
offset += 4;
static gint
dissect_reply_afp_write(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gint offset)
{
- proto_tree_add_item(tree, hf_afp_last_written, tvb, offset, 4, FALSE);
+ proto_tree_add_item(tree, hf_afp_last_written, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
return offset;
static gint
dissect_query_afp_write_ext(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gint offset)
{
- proto_tree_add_item(tree, hf_afp_flag, tvb, offset, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
add_info_fork(tvb, pinfo, offset);
- proto_tree_add_item(tree, hf_afp_ofork, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_ofork, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
- proto_tree_add_item(tree, hf_afp_offset64, tvb, offset, 8,FALSE);
+ proto_tree_add_item(tree, hf_afp_offset64, tvb, offset, 8, ENC_BIG_ENDIAN);
offset += 8;
- proto_tree_add_item(tree, hf_afp_rw_count64, tvb, offset, 8,FALSE);
+ proto_tree_add_item(tree, hf_afp_rw_count64, tvb, offset, 8, ENC_BIG_ENDIAN);
offset += 8;
return offset;
static gint
dissect_reply_afp_write_ext(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gint offset)
{
- proto_tree_add_item(tree, hf_afp_last_written64, tvb, offset, 8, FALSE);
+ proto_tree_add_item(tree, hf_afp_last_written64, tvb, offset, 8, ENC_BIG_ENDIAN);
offset += 8;
return offset;
PAD(1);
add_info_fork(tvb, pinfo, offset);
- proto_tree_add_item(tree, hf_afp_ofork, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_ofork, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
- proto_tree_add_item(tree, hf_afp_offset, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_offset, tvb, offset, 4, ENC_BIG_ENDIAN);
param = tvb_get_ntohl(tvb, offset);
col_append_fstr(pinfo->cinfo, COL_INFO, " Offset=%d", param);
offset += 4;
- proto_tree_add_item(tree, hf_afp_rw_count, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_rw_count, tvb, offset, 4, ENC_BIG_ENDIAN);
param = tvb_get_ntohl(tvb, offset);
col_append_fstr(pinfo->cinfo, COL_INFO, " Size=%d", param);
offset += 4;
- proto_tree_add_item(tree, hf_afp_newline_mask, tvb, offset, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_newline_mask, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
- proto_tree_add_item(tree, hf_afp_newline_char, tvb, offset, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_newline_char, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
return offset;
PAD(1);
add_info_fork(tvb, pinfo, offset);
- proto_tree_add_item(tree, hf_afp_ofork, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_ofork, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
- proto_tree_add_item(tree, hf_afp_offset64, tvb, offset, 8,FALSE);
+ proto_tree_add_item(tree, hf_afp_offset64, tvb, offset, 8, ENC_BIG_ENDIAN);
offset += 8;
- proto_tree_add_item(tree, hf_afp_rw_count64, tvb, offset, 8,FALSE);
+ proto_tree_add_item(tree, hf_afp_rw_count64, tvb, offset, 8, ENC_BIG_ENDIAN);
offset += 8;
return offset;
static gint
dissect_reply_afp_open_dt(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gint offset)
{
- proto_tree_add_item(tree, hf_afp_dt_ref, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_dt_ref, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
return offset;
dissect_query_afp_close_dt(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gint offset)
{
PAD(1);
- proto_tree_add_item(tree, hf_afp_dt_ref, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_dt_ref, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
return offset;
{
PAD(1);
add_info_fork(tvb, pinfo, offset);
- proto_tree_add_item(tree, hf_afp_ofork, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_ofork, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
return offset;
offset += 2;
flags = tvb_get_guint8(tvb, offset);
- proto_tree_add_item(tree, hf_afp_file_flag, tvb, offset, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_file_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
PAD(1);
if (flags) {
static gint
dissect_reply_afp_create_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gint offset)
{
- proto_tree_add_item(tree, hf_afp_file_id, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_file_id, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
return offset;
static gint
dissect_reply_afp_create_dir(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gint offset)
{
- proto_tree_add_item(tree, hf_afp_did, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_did, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
return offset;
dissect_query_afp_delete_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gint offset)
{
PAD(1);
- proto_tree_add_item(tree, hf_afp_vol_id, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_vol_id, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
- proto_tree_add_item(tree, hf_afp_file_id, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_file_id, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
return offset;
dissect_query_afp_resolve_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gint offset)
{
PAD(1);
- proto_tree_add_item(tree, hf_afp_vol_id, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_vol_id, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
- proto_tree_add_item(tree, hf_afp_file_id, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_file_id, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
decode_file_bitmap(tree, tvb, offset);
PAD(1);
add_info_fork(tvb, pinfo, offset);
- proto_tree_add_item(tree, hf_afp_ofork, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_ofork, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
decode_file_bitmap(tree, tvb, offset);
PAD(1);
add_info_fork(tvb, pinfo, offset);
- proto_tree_add_item(tree, hf_afp_ofork, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_ofork, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
bitmap = decode_file_bitmap(tree, tvb, offset);
offset += 2;
if ((bitmap & kFPExtDataForkLenBit) || (bitmap & kFPExtRsrcForkLenBit)) {
- proto_tree_add_item(tree, hf_afp_ofork_len64, tvb, offset, 8, FALSE);
+ proto_tree_add_item(tree, hf_afp_ofork_len64, tvb, offset, 8, ENC_BIG_ENDIAN);
offset += 8;
}
else {
- proto_tree_add_item(tree, hf_afp_ofork_len, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_ofork_len, tvb, offset, 4, ENC_BIG_ENDIAN);
param = tvb_get_ntohl(tvb, offset);
col_append_fstr(pinfo->cinfo, COL_INFO, " Size=%d", param);
offset += 4;
PAD(1);
offset = decode_vol_did(tree, tvb, offset);
- proto_tree_add_item(tree, hf_afp_did, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_did, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
offset = decode_name_label(tree, pinfo, tvb, offset, "Source path: %s");
- offset = decode_name_label(tree, NULL, tvb, offset, "Dest dir: %s");
- offset = decode_name_label(tree, NULL, tvb, offset, "New name: %s");
+ offset = decode_name_label(tree, NULL, tvb, offset, "Dest dir: %s");
+ offset = decode_name_label(tree, NULL, tvb, offset, "New name: %s");
return offset;
}
PAD(1);
offset = decode_vol_did(tree, tvb, offset);
- proto_tree_add_item(tree, hf_afp_did, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_did, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
offset = decode_name_label(tree, pinfo, tvb, offset, "Source path: %s");
offset = decode_vol_did(sub_tree, tvb, offset);
offset = decode_name_label(tree, pinfo, tvb, offset, "Source path: %s");
- offset = decode_name_label(tree, NULL, tvb, offset, "Dest dir: %s");
- offset = decode_name_label(tree, NULL, tvb, offset, "New name: %s");
+ offset = decode_name_label(tree, NULL, tvb, offset, "Dest dir: %s");
+ offset = decode_name_label(tree, NULL, tvb, offset, "New name: %s");
return offset;
}
sub_tree = proto_item_add_subtree(item, ett_afp_lock_flags);
}
- proto_tree_add_item(sub_tree, hf_afp_lock_op, tvb, offset, 1,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_lock_from, tvb, offset, 1,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_lock_op, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_lock_from, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
- proto_tree_add_item(tree, hf_afp_ofork, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_ofork, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
- proto_tree_add_item(tree, hf_afp_lock_offset, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_lock_offset, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
- proto_tree_add_item(tree, hf_afp_lock_len, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_lock_len, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
return offset;
}
static gint
dissect_reply_afp_byte_lock(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gint offset)
{
- proto_tree_add_item(tree, hf_afp_lock_range_start, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_lock_range_start, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
return offset;
sub_tree = proto_item_add_subtree(item, ett_afp_lock_flags);
}
- proto_tree_add_item(sub_tree, hf_afp_lock_op, tvb, offset, 1,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_lock_from, tvb, offset, 1,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_lock_op, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_lock_from, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
- proto_tree_add_item(tree, hf_afp_ofork, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_ofork, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
- proto_tree_add_item(tree, hf_afp_lock_offset64, tvb, offset, 8,FALSE);
+ proto_tree_add_item(tree, hf_afp_lock_offset64, tvb, offset, 8, ENC_BIG_ENDIAN);
offset += 8;
- proto_tree_add_item(tree, hf_afp_lock_len64, tvb, offset, 8,FALSE);
+ proto_tree_add_item(tree, hf_afp_lock_len64, tvb, offset, 8, ENC_BIG_ENDIAN);
offset += 8;
return offset;
}
static gint
dissect_reply_afp_byte_lock_ext(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gint offset)
{
- proto_tree_add_item(tree, hf_afp_lock_range_start64, tvb, offset, 8,FALSE);
+ proto_tree_add_item(tree, hf_afp_lock_range_start64, tvb, offset, 8, ENC_BIG_ENDIAN);
offset += 8;
return offset;
guint8 len;
PAD(1);
- proto_tree_add_item(tree, hf_afp_dt_ref, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_dt_ref, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
- proto_tree_add_item(tree, hf_afp_did, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_did, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
offset = decode_name(tree, pinfo, tvb, offset);
PAD(1);
len = tvb_get_guint8(tvb, offset);
- proto_tree_add_item(tree, hf_afp_comment, tvb, offset, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_comment, tvb, offset, 1, ENC_UTF_8|ENC_BIG_ENDIAN);
offset += len +1;
return offset;
{
PAD(1);
- proto_tree_add_item(tree, hf_afp_dt_ref, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_dt_ref, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
- proto_tree_add_item(tree, hf_afp_did, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_did, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
offset = decode_name(tree, pinfo, tvb, offset);
guint8 len;
len = tvb_get_guint8(tvb, offset);
- proto_tree_add_item(tree, hf_afp_comment, tvb, offset, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_comment, tvb, offset, 1, ENC_UTF_8|ENC_BIG_ENDIAN);
offset += len +1;
return offset;
{
PAD(1);
- proto_tree_add_item(tree, hf_afp_dt_ref, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_dt_ref, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
- proto_tree_add_item(tree, hf_afp_file_creator, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_file_creator, tvb, offset, 4, ENC_UTF_8|ENC_NA);
offset += 4;
- proto_tree_add_item(tree, hf_afp_file_type, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_file_type, tvb, offset, 4, ENC_ASCII|ENC_NA);
offset += 4;
- proto_tree_add_item(tree, hf_afp_icon_type, tvb, offset, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_icon_type, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
PAD(1);
- proto_tree_add_item(tree, hf_afp_icon_length, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_icon_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
return offset;
{
PAD(1);
- proto_tree_add_item(tree, hf_afp_dt_ref, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_dt_ref, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
- proto_tree_add_item(tree, hf_afp_file_creator, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_file_creator, tvb, offset, 4, ENC_ASCII|ENC_NA);
offset += 4;
- proto_tree_add_item(tree, hf_afp_icon_index, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_icon_index, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
return offset;
dissect_reply_afp_get_icon_info(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gint offset)
{
- proto_tree_add_item(tree, hf_afp_icon_tag, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_icon_tag, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
- proto_tree_add_item(tree, hf_afp_file_type, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_file_type, tvb, offset, 4, ENC_ASCII|ENC_NA);
offset += 4;
- proto_tree_add_item(tree, hf_afp_icon_type, tvb, offset, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_icon_type, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
PAD(1);
- proto_tree_add_item(tree, hf_afp_icon_length, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_icon_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
return offset;
{
PAD(1);
- proto_tree_add_item(tree, hf_afp_dt_ref, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_dt_ref, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
- proto_tree_add_item(tree, hf_afp_file_creator, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_file_creator, tvb, offset, 4, ENC_ASCII|ENC_NA);
offset += 4;
- proto_tree_add_item(tree, hf_afp_file_type, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_file_type, tvb, offset, 4, ENC_ASCII|ENC_NA);
offset += 4;
- proto_tree_add_item(tree, hf_afp_icon_type, tvb, offset, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_icon_type, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
PAD(1);
- proto_tree_add_item(tree, hf_afp_icon_tag, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_icon_tag, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
- proto_tree_add_item(tree, hf_afp_icon_length, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_icon_length, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
return offset;
{
/* FIXME it's not volume but dt cf decode_name*/
Vol = tvb_get_ntohs(tvb, offset);
- proto_tree_add_item(tree, hf_afp_dt_ref, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_dt_ref, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
Did = tvb_get_ntohl(tvb, offset);
- proto_tree_add_item(tree, hf_afp_did, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_did, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
return offset;
}
PAD(1);
offset = decode_dt_did(tree, tvb, offset);
- proto_tree_add_item(tree, hf_afp_file_creator, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_file_creator, tvb, offset, 4, ENC_ASCII|ENC_NA);
offset += 4;
- proto_tree_add_item(tree, hf_afp_appl_tag, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_appl_tag, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
offset = decode_name(tree, pinfo, tvb, offset);
PAD(1);
offset = decode_dt_did(tree, tvb, offset);
- proto_tree_add_item(tree, hf_afp_file_creator, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_file_creator, tvb, offset, 4, ENC_ASCII|ENC_NA);
offset += 4;
offset = decode_name(tree, pinfo, tvb, offset);
{
PAD(1);
- proto_tree_add_item(tree, hf_afp_dt_ref, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_dt_ref, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
- proto_tree_add_item(tree, hf_afp_file_creator, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_file_creator, tvb, offset, 4, ENC_ASCII|ENC_NA);
offset += 4;
- proto_tree_add_item(tree, hf_afp_appl_index, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_appl_index, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
decode_file_bitmap(tree, tvb, offset);
static gint
dissect_reply_afp_get_appl(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gint offset)
{
- proto_tree_add_item(tree, hf_afp_appl_tag, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_appl_tag, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
return offset;
static gint
dissect_query_afp_create_file(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gint offset)
{
- proto_tree_add_item(tree, hf_afp_create_flag, tvb, offset, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_create_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
offset = decode_vol_did(tree, tvb, offset);
guint8 type;
type = tvb_get_guint8(tvb, offset);
- proto_tree_add_item(tree, hf_afp_map_id_type, tvb, offset, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_map_id_type, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
if ( type < 5) {
- proto_tree_add_item(tree, hf_afp_map_id, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_map_id, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
}
else {
- proto_tree_add_item(tree, hf_afp_UUID, tvb, offset, 16,FALSE);
+ proto_tree_add_item(tree, hf_afp_UUID, tvb, offset, 16, ENC_BIG_ENDIAN);
offset += 16;
}
len = tvb_get_guint8(tvb, offset +1);
if (!len) {
/* assume it's undocumented type 5 or 6 reply */
- proto_tree_add_item(tree, hf_afp_map_id_reply_type, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_map_id_reply_type, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
- proto_tree_add_item(tree, hf_afp_map_id, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_map_id, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
size = 2;
}
}
if (size) {
- proto_tree_add_item(tree, hf_afp_map_name, tvb, offset, size, FALSE);
+ proto_tree_add_item(tree, hf_afp_map_name, tvb, offset, size, ENC_ASCII|ENC_NA);
}
else {
- proto_tree_add_item(tree, hf_afp_unknown, tvb, offset, len, FALSE);
+ proto_tree_add_item(tree, hf_afp_unknown, tvb, offset, len, ENC_NA);
}
offset += len +size;
return offset;
int size;
type = tvb_get_guint8(tvb, offset);
- proto_tree_add_item(tree, hf_afp_map_name_type, tvb, offset, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_map_name_type, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
switch (type) {
case 5: /* use 16 bits length */
len = tvb_get_guint8(tvb, offset);
break;
}
- proto_tree_add_item(tree, hf_afp_map_name, tvb, offset, size, FALSE);
+ proto_tree_add_item(tree, hf_afp_map_name, tvb, offset, size, ENC_ASCII|ENC_NA);
offset += len +size;
return offset;
/* If remain == 16, assume UUID */
remain = tvb_reported_length(tvb);
if (remain == 16) {
- proto_tree_add_item(tree, hf_afp_UUID, tvb, offset, 16, FALSE);
+ proto_tree_add_item(tree, hf_afp_UUID, tvb, offset, 16, ENC_BIG_ENDIAN);
offset += 16;
}
else {
- proto_tree_add_item(tree, hf_afp_map_id, tvb, offset, 4, FALSE);
+ proto_tree_add_item(tree, hf_afp_map_id, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
}
PAD(1);
- proto_tree_add_item(tree, hf_afp_session_token_type, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_session_token_type, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
len = tvb_get_ntohl(tvb, offset);
- proto_tree_add_item(tree, hf_afp_session_token_len, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_session_token_len, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
- proto_tree_add_item(tree, hf_afp_session_token, tvb, offset, len,FALSE);
+ proto_tree_add_item(tree, hf_afp_session_token, tvb, offset, len, ENC_NA);
offset += len;
if (offset <= orig_offset)
PAD(1);
token = tvb_get_ntohs(tvb, offset);
- proto_tree_add_item(tree, hf_afp_session_token_type, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_session_token_type, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
if (token == kLoginWithoutID || token == kGetKerberosSessionKey) /* 0 || 8 */
return offset;
len = tvb_get_ntohl(tvb, offset);
- proto_tree_add_item(tree, hf_afp_session_token_len, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_session_token_len, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
switch (token) {
case kLoginWithTimeAndID:
case kReconnWithTimeAndID:
- proto_tree_add_item(tree, hf_afp_session_token_timestamp, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_session_token_timestamp, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
}
- proto_tree_add_item(tree, hf_afp_session_token, tvb, offset, len,FALSE);
+ proto_tree_add_item(tree, hf_afp_session_token, tvb, offset, len, ENC_NA);
offset += len;
if (offset <= orig_offset)
size = 4;
/* [cm]: FIXME continued: Since size is set to 4, this test is never true.
if (size == 2) {
- proto_tree_add_item(tree, hf_afp_session_token_type, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_session_token_type, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
}
*/
len = tvb_get_ntohl(tvb, offset);
- proto_tree_add_item(tree, hf_afp_session_token_len, tvb, offset, size,FALSE);
+ proto_tree_add_item(tree, hf_afp_session_token_len, tvb, offset, size, ENC_BIG_ENDIAN);
offset += size;
- proto_tree_add_item(tree, hf_afp_session_token, tvb, offset, len,FALSE);
+ proto_tree_add_item(tree, hf_afp_session_token, tvb, offset, len, ENC_NA);
offset += len;
if (offset <= orig_offset)
{
PAD(1);
- proto_tree_add_item(tree, hf_afp_message_type, tvb, offset, 2, FALSE);
+ proto_tree_add_item(tree, hf_afp_message_type, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
if (tree) {
proto_tree *sub_tree;
proto_item *item;
- item = proto_tree_add_item(tree, hf_afp_message_bitmap, tvb, offset, 2, FALSE);
+ item = proto_tree_add_item(tree, hf_afp_message_bitmap, tvb, offset, 2, ENC_BIG_ENDIAN);
sub_tree = proto_item_add_subtree(item, ett_afp_message_bitmap);
- proto_tree_add_item(sub_tree, hf_afp_message_bitmap_REQ, tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_message_bitmap_UTF, tvb, offset, 2,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_message_bitmap_REQ, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_message_bitmap_UTF, tvb, offset, 2, ENC_BIG_ENDIAN);
}
offset += 2;
/* FIXME: APF 3.1 specs also specify a long reply format, yet unused */
- proto_tree_add_item(tree, hf_afp_message_type, tvb, offset, 2, FALSE);
+ proto_tree_add_item(tree, hf_afp_message_type, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
bitmap = tvb_get_ntohs(tvb, offset);
proto_tree *sub_tree;
proto_item *item;
- item = proto_tree_add_item(tree, hf_afp_message_bitmap, tvb, offset, 2, FALSE);
+ item = proto_tree_add_item(tree, hf_afp_message_bitmap, tvb, offset, 2, ENC_BIG_ENDIAN);
sub_tree = proto_item_add_subtree(item, ett_afp_message_bitmap);
- proto_tree_add_item(sub_tree, hf_afp_message_bitmap_REQ, tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_message_bitmap_UTF, tvb, offset, 2,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_message_bitmap_REQ, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_message_bitmap_UTF, tvb, offset, 2, ENC_BIG_ENDIAN);
}
offset += 2;
- /* FIXME: Not in the specs, but for UTF8 message length is 2 bytes */
- if ((bitmap & 3) == 3) {
+ /*
+ * XXX - the spec says that the 0x01 bit indicates whether
+ * the ServerMessage field contains a server message or a login
+ * message.
+ */
+ if (bitmap & 0x02) {
+ /* Message is UTF-8, and message length is 2 bytes */
len = tvb_get_ntohs(tvb, offset);
- proto_tree_add_item(tree, hf_afp_message_len, tvb, offset, 2,FALSE);
+ proto_tree_add_item(tree, hf_afp_message_len, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
- }
- else if ((bitmap & 1)) {
+ if (len) {
+ proto_tree_add_item(tree, hf_afp_message, tvb, offset, len , ENC_UTF_8|ENC_NA);
+ offset += len;
+ }
+ } else {
+ /*
+ * Message is not UTF-8, and message length is 1 byte.
+ *
+ * Is the message in some Mac encoding? Always Mac Roman,
+ * or possibly some other encoding for other locales?
+ */
len = tvb_get_guint8(tvb, offset);
- proto_tree_add_item(tree, hf_afp_message_len, tvb, offset, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_message_len, tvb, offset, 1, ENC_BIG_ENDIAN);
offset += 1;
- }
-
- if (len) {
- proto_tree_add_item(tree, hf_afp_message, tvb, offset, len ,FALSE);
- offset += len;
+ if (len) {
+ proto_tree_add_item(tree, hf_afp_message, tvb, offset, len , ENC_ASCII|ENC_NA);
+ offset += len;
+ }
}
return offset;
dissect_query_afp_get_user_info(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gint offset)
{
- proto_tree_add_item(tree, hf_afp_user_flag, tvb, offset, 1,FALSE);
+ proto_tree_add_item(tree, hf_afp_user_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
- proto_tree_add_item(tree, hf_afp_user_ID, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_user_ID, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
if (tree) {
proto_tree *sub_tree;
proto_item *item;
- item = proto_tree_add_item(tree, hf_afp_user_bitmap, tvb, offset, 2,FALSE);
+ item = proto_tree_add_item(tree, hf_afp_user_bitmap, tvb, offset, 2, ENC_BIG_ENDIAN);
sub_tree = proto_item_add_subtree(item, ett_afp_user_bitmap);
- proto_tree_add_item(sub_tree, hf_afp_user_bitmap_UID, tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_user_bitmap_GID, tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_user_bitmap_UUID, tvb, offset, 2,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_user_bitmap_UID, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_user_bitmap_GID, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_user_bitmap_UUID, tvb, offset, 2, ENC_BIG_ENDIAN);
}
offset += 2;
proto_tree *sub_tree;
proto_item *item;
- item = proto_tree_add_item(tree, hf_afp_user_bitmap, tvb, offset, 2,FALSE);
+ item = proto_tree_add_item(tree, hf_afp_user_bitmap, tvb, offset, 2, ENC_BIG_ENDIAN);
sub_tree = proto_item_add_subtree(item, ett_afp_user_bitmap);
- proto_tree_add_item(sub_tree, hf_afp_user_bitmap_UID, tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_user_bitmap_GID, tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_user_bitmap_UUID, tvb, offset, 2,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_user_bitmap_UID, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_user_bitmap_GID, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_user_bitmap_UUID, tvb, offset, 2, ENC_BIG_ENDIAN);
}
offset += 2;
if ((bitmap & 1)) {
- proto_tree_add_item(tree, hf_afp_user_ID, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_user_ID, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
}
if ((bitmap & 2)) {
- proto_tree_add_item(tree, hf_afp_group_ID, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_group_ID, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
}
if ((bitmap & 4)) {
- proto_tree_add_item(tree, hf_afp_UUID, tvb, offset, 16,FALSE);
+ proto_tree_add_item(tree, hf_afp_UUID, tvb, offset, 16, ENC_BIG_ENDIAN);
offset += 16;
}
return offset;
item = proto_tree_add_text(tree, tvb, offset, len + 2, label, name);
sub_tree = proto_item_add_subtree(item, ett_afp_extattr_names);
- proto_tree_add_item(sub_tree, hf_afp_extattr_namelen, tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_extattr_name, tvb, offset +2, len, FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_extattr_namelen, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_extattr_name, tvb, offset +2, len, ENC_UTF_8|ENC_NA);
}
offset += 2 +len;
proto_tree *sub_tree;
proto_item *item;
- item = proto_tree_add_item(tree, hf_afp_extattr_bitmap, tvb, offset, 2,FALSE);
+ item = proto_tree_add_item(tree, hf_afp_extattr_bitmap, tvb, offset, 2, ENC_BIG_ENDIAN);
sub_tree = proto_item_add_subtree(item, ett_afp_extattr_bitmap);
- proto_tree_add_item(sub_tree, hf_afp_extattr_bitmap_NoFollow, tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_extattr_bitmap_Create, tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_extattr_bitmap_Replace, tvb, offset, 2,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_extattr_bitmap_NoFollow, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_extattr_bitmap_Create, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_extattr_bitmap_Replace, tvb, offset, 2, ENC_BIG_ENDIAN);
}
offset += 2;
return offset;
offset = decode_attr_bitmap(tree, tvb, offset);
/* 8byte offset */
- proto_tree_add_item(tree, hf_afp_offset64, tvb, offset, 8,FALSE);
+ proto_tree_add_item(tree, hf_afp_offset64, tvb, offset, 8, ENC_BIG_ENDIAN);
offset += 8;
/* 8byte reqcount */
- proto_tree_add_item(tree, hf_afp_reqcount64, tvb, offset, 8,FALSE);
+ proto_tree_add_item(tree, hf_afp_reqcount64, tvb, offset, 8, ENC_BIG_ENDIAN);
offset += 8;
/* maxreply */
- proto_tree_add_item(tree, hf_afp_extattr_reply_size, tvb, offset, 4, FALSE);
+ proto_tree_add_item(tree, hf_afp_extattr_reply_size, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
offset = decode_name(tree, pinfo, tvb, offset);
offset = decode_attr_bitmap(tree, tvb, offset);
len = tvb_get_ntohl(tvb, offset);
- proto_tree_add_item(tree, hf_afp_extattr_len, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_extattr_len, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
remain = tvb_reported_length_remaining(tvb, offset);
if (len && remain >= len ) {
- proto_tree_add_item(tree, hf_afp_extattr_data, tvb, offset, len, FALSE);
+ proto_tree_add_item(tree, hf_afp_extattr_data, tvb, offset, len, ENC_NA);
offset += len;
}
offset = decode_attr_bitmap(tree, tvb, offset);
/* 8byte offset */
- proto_tree_add_item(tree, hf_afp_offset64, tvb, offset, 8,FALSE);
+ proto_tree_add_item(tree, hf_afp_offset64, tvb, offset, 8, ENC_BIG_ENDIAN);
offset += 8;
offset = decode_name(tree, pinfo, tvb, offset);
offset = decode_attr_name(tree, pinfo, tvb, offset, "Attribute: %s");
len = tvb_get_ntohl(tvb, offset);
- proto_tree_add_item(tree, hf_afp_extattr_len, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_extattr_len, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
- proto_tree_add_item(tree, hf_afp_extattr_data, tvb, offset, len, FALSE);
+ proto_tree_add_item(tree, hf_afp_extattr_data, tvb, offset, len, ENC_NA);
offset += len;
return offset;
/* for this command only kXAttrNoFollow is valid */
offset = decode_attr_bitmap(tree, tvb, offset);
- proto_tree_add_item(tree, hf_afp_extattr_req_count, tvb, offset, 2, FALSE);
+ proto_tree_add_item(tree, hf_afp_extattr_req_count, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
- proto_tree_add_item(tree, hf_afp_extattr_start_index, tvb, offset, 4, FALSE);
+ proto_tree_add_item(tree, hf_afp_extattr_start_index, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
- proto_tree_add_item(tree, hf_afp_extattr_reply_size, tvb, offset, 4, FALSE);
+ proto_tree_add_item(tree, hf_afp_extattr_reply_size, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
offset = decode_name(tree, pinfo, tvb, offset);
offset = decode_attr_bitmap(tree, tvb, offset);
length = tvb_get_ntohl(tvb, offset);
- proto_tree_add_item(tree, hf_afp_extattr_reply_size, tvb, offset, 4, FALSE);
+ proto_tree_add_item(tree, hf_afp_extattr_reply_size, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
/* If reply_size was 0 on request, server only reports the size of
item = proto_tree_add_text(tree, tvb, offset, remain , "Attributes");
sub_tree = proto_item_add_subtree(item, ett_afp_extattr_names);
while ( remain > 0) {
- tvb_get_ephemeral_stringz(tvb, offset, &length);
- proto_tree_add_item(sub_tree, hf_afp_extattr_name, tvb, offset, length, FALSE);
+ length = tvb_strsize(tvb, offset);
+ proto_tree_add_item(sub_tree, hf_afp_extattr_name, tvb, offset, length, ENC_UTF_8|ENC_NA);
offset += length;
remain -= length;
}
proto_tree *sub_tree;
proto_item *item;
- item = proto_tree_add_item(tree, hf_afp_acl_access_bitmap, tvb, offset, 4, FALSE);
+ item = proto_tree_add_item(tree, hf_afp_acl_access_bitmap, tvb, offset, 4, ENC_BIG_ENDIAN);
sub_tree = proto_item_add_subtree(item, ett_afp_acl_access_bitmap);
- proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_read_data , tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_write_data , tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_execute , tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_delete , tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_append_data , tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_delete_child , tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_read_attrs , tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_write_attrs , tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_read_extattrs , tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_write_extattrs , tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_read_security , tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_write_security , tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_change_owner , tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_synchronize , tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_generic_all , tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_generic_execute, tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_generic_write , tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_generic_read , tvb, offset, 4,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_read_data , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_write_data , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_execute , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_delete , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_append_data , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_delete_child , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_read_attrs , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_write_attrs , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_read_extattrs , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_write_extattrs , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_read_security , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_write_security , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_change_owner , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_synchronize , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_generic_all , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_generic_execute, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_generic_write , tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_acl_access_bitmap_generic_read , tvb, offset, 4, ENC_BIG_ENDIAN);
}
return bitmap;
PAD(1);
offset = decode_vol_did(tree, tvb, offset);
- proto_tree_add_item(tree, hf_afp_access_bitmap, tvb, offset, 2, FALSE);
+ proto_tree_add_item(tree, hf_afp_access_bitmap, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
- proto_tree_add_item(tree, hf_afp_UUID, tvb, offset, 16, FALSE);
+ proto_tree_add_item(tree, hf_afp_UUID, tvb, offset, 16, ENC_BIG_ENDIAN);
offset += 16;
decode_acl_access_bitmap(tvb, tree, offset);
PAD(1);
offset = decode_vol_did(tree, tvb, offset);
- proto_tree_add_item(tree, hf_afp_did, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_did, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
return offset;
}
+/* ************************** */
+
+#define SQ_TYPE_NULL 0x0000
+#define SQ_TYPE_COMPLEX 0x0200
+#define SQ_TYPE_INT64 0x8400
+#define SQ_TYPE_BOOL 0x0100
+#define SQ_TYPE_FLOAT 0x8500
+#define SQ_TYPE_DATA 0x0700
+#define SQ_TYPE_CNIDS 0x8700
+#define SQ_TYPE_UUID 0x0e00
+#define SQ_TYPE_DATE 0x8600
+
+#define SQ_CPX_TYPE_ARRAY 0x0a00
+#define SQ_CPX_TYPE_STRING 0x0c00
+#define SQ_CPX_TYPE_UTF16_STRING 0x1c00
+#define SQ_CPX_TYPE_DICT 0x0d00
+#define SQ_CPX_TYPE_CNIDS 0x1a00
+#define SQ_CPX_TYPE_FILEMETA 0x1b00
+
+#define SUBQ_SAFETY_LIM 20
+
+static gint
+spotlight_int64(tvbuff_t *tvb, proto_tree *tree, gint offset, guint encoding)
+{
+ gint count, i;
+ guint64 query_data64;
+
+ query_data64 = spotlight_ntoh64(tvb, offset, encoding);
+ count = query_data64 >> 32;
+ offset += 8;
+
+ i = 0;
+ while (i++ < count) {
+ query_data64 = spotlight_ntoh64(tvb, offset, encoding);
+ proto_tree_add_text(tree, tvb, offset, 8, "int64: 0x%016" G_GINT64_MODIFIER "x", query_data64);
+ offset += 8;
+ }
+
+ return count;
+}
+
+static gint
+spotlight_date(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gint offset, guint encoding)
+{
+ gint count, i;
+ guint64 query_data64;
+ nstime_t t;
+
+ query_data64 = spotlight_ntoh64(tvb, offset, encoding);
+ count = query_data64 >> 32;
+ offset += 8;
+
+ if (count > SUBQ_SAFETY_LIM) {
+ expert_add_info_format(pinfo, tree, PI_MALFORMED, PI_ERROR,
+ "Subquery count (%d) > safety limit (%d)", count, SUBQ_SAFETY_LIM);
+ return -1;
+ }
+
+ i = 0;
+ while (i++ < count) {
+ query_data64 = spotlight_ntoh64(tvb, offset, encoding) >> 24;
+ t.secs = query_data64 - SPOTLIGHT_TIME_DELTA;
+ t.nsecs = 0;
+ proto_tree_add_time(tree, hf_afp_spotlight_date, tvb, offset, 8, &t);
+ offset += 8;
+ }
+
+ return count;
+}
+
+static gint
+spotlight_uuid(tvbuff_t *tvb, proto_tree *tree, gint offset, guint encoding)
+{
+ gint count, i;
+ guint64 query_data64;
+
+ query_data64 = spotlight_ntoh64(tvb, offset, encoding);
+ count = query_data64 >> 32;
+ offset += 8;
+
+ i = 0;
+ while (i++ < count) {
+ proto_tree_add_item(tree, hf_afp_spotlight_uuid, tvb, offset, 16, ENC_BIG_ENDIAN);
+ offset += 16;
+ }
+
+ return count;
+}
+
+static gint
+spotlight_float(tvbuff_t *tvb, proto_tree *tree, gint offset, guint encoding)
+{
+ gint count, i;
+ guint64 query_data64;
+ gdouble fval;
+
+ query_data64 = spotlight_ntoh64(tvb, offset, encoding);
+ count = query_data64 >> 32;
+ offset += 8;
+
+ i = 0;
+ while (i++ < count) {
+ fval = spotlight_ntohieee_double(tvb, offset, encoding);
+ proto_tree_add_text(tree, tvb, offset, 8, "float: %f", fval);
+ offset += 8;
+ }
+
+ return count;
+}
+
+static gint
+spotlight_CNID_array(tvbuff_t *tvb, proto_tree *tree, gint offset, guint encoding)
+{
+ gint count;
+ guint64 query_data64;
+ guint16 unknown1;
+ guint32 unknown2;
+
+ query_data64 = spotlight_ntoh64(tvb, offset, encoding);
+ count = query_data64 & 0xffff;
+ unknown1 = (query_data64 & 0xffff0000) >> 16;
+ unknown2 = query_data64 >> 32;
+
+ proto_tree_add_text(tree, tvb, offset + 2, 2, "unknown1: 0x%04" G_GINT16_MODIFIER "x",
+ unknown1);
+ proto_tree_add_text(tree, tvb, offset + 4, 4, "unknown2: 0x%08" G_GINT32_MODIFIER "x",
+ unknown2);
+ offset += 8;
+
+
+ while (count --) {
+ query_data64 = spotlight_ntoh64(tvb, offset, encoding);
+ proto_tree_add_text(tree, tvb, offset, 8, "CNID: %" G_GINT64_MODIFIER "u",
+ query_data64);
+ offset += 8;
+ }
+
+ return 0;
+}
+
+static const char *spotlight_get_qtype_string(guint64 query_type)
+{
+ switch (query_type) {
+ case SQ_TYPE_NULL:
+ return "null";
+ case SQ_TYPE_COMPLEX:
+ return "complex";
+ case SQ_TYPE_INT64:
+ return "int64";
+ case SQ_TYPE_BOOL:
+ return "bool";
+ case SQ_TYPE_FLOAT:
+ return "float";
+ case SQ_TYPE_DATA:
+ return "data";
+ case SQ_TYPE_CNIDS:
+ return "CNIDs";
+ default:
+ return "unknown";
+ }
+}
+
+static const char *spotlight_get_cpx_qtype_string(guint64 cpx_query_type)
+{
+ switch (cpx_query_type) {
+ case SQ_CPX_TYPE_ARRAY:
+ return "array";
+ case SQ_CPX_TYPE_STRING:
+ return "string";
+ case SQ_CPX_TYPE_UTF16_STRING:
+ return "utf-16 string";
+ case SQ_CPX_TYPE_DICT:
+ return "dictionary";
+ case SQ_CPX_TYPE_CNIDS:
+ return "CNIDs";
+ case SQ_CPX_TYPE_FILEMETA:
+ return "FileMeta";
+ default:
+ return "unknown";
+ }
+}
+
+static gint
+spotlight_dissect_query_loop(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gint offset,
+ guint64 cpx_query_type, gint count, gint toc_offset, guint encoding)
+{
+ gint i, j;
+ gint subquery_count;
+ gint toc_index;
+ guint64 query_data64;
+ gint query_length;
+ guint64 query_type;
+ guint64 complex_query_type;
+ guint unicode_encoding;
+ guint8 mark_exists;
+
+ proto_item *item_query;
+ proto_tree *sub_tree;
+
+ /*
+ * This loops through a possibly nested query data structure.
+ * The outermost one is always without count and called from
+ * dissect_spotlight() with count = INT_MAX thus the while (...)
+ * loop terminates if (offset >= toc_offset).
+ * If nested structures are found, these will have an encoded element
+ * count which is used in a recursive call to
+ * spotlight_dissect_query_loop as count parameter, thus in this case
+ * the while (...) loop will terminate when count reaches 0.
+ */
+ while ((offset < (toc_offset - 8)) && (count > 0)) {
+ query_data64 = spotlight_ntoh64(tvb, offset, encoding);
+ query_length = (query_data64 & 0xffff) * 8;
+ if (query_length == 0) {
+ /* XXX - report this as an error */
+ break;
+ }
+ query_type = (query_data64 & 0xffff0000) >> 16;
+
+ switch (query_type) {
+ case SQ_TYPE_COMPLEX:
+ toc_index = (gint)((query_data64 >> 32) - 1);
+ query_data64 = spotlight_ntoh64(tvb, toc_offset + toc_index * 8, encoding);
+ complex_query_type = (query_data64 & 0xffff0000) >> 16;
+
+ switch (complex_query_type) {
+ case SQ_CPX_TYPE_ARRAY:
+ case SQ_CPX_TYPE_DICT:
+ subquery_count = (gint)(query_data64 >> 32);
+ item_query = proto_tree_add_text(tree, tvb, offset, query_length,
+ "%s, toc index: %u, children: %u",
+ spotlight_get_cpx_qtype_string(complex_query_type),
+ toc_index + 1,
+ subquery_count);
+ break;
+ case SQ_CPX_TYPE_STRING:
+ subquery_count = 1;
+ query_data64 = spotlight_ntoh64(tvb, offset + 8, encoding);
+ query_length = (query_data64 & 0xffff) * 8;
+ item_query = proto_tree_add_text(tree, tvb, offset, query_length + 8,
+ "%s, toc index: %u, string: '%s'",
+ spotlight_get_cpx_qtype_string(complex_query_type),
+ toc_index + 1,
+ tvb_get_ephemeral_string(tvb, offset + 16, query_length - 8));
+ break;
+ case SQ_CPX_TYPE_UTF16_STRING:
+ /*
+ * This is an UTF-16 string.
+ * Dissections show the typical byte order mark 0xFFFE or 0xFEFF, respectively.
+ * However the existence of such a mark can not be assumed.
+ * If the mark is missing, big endian encoding is assumed.
+ */
+
+ subquery_count = 1;
+ query_data64 = spotlight_ntoh64(tvb, offset + 8, encoding);
+ query_length = (query_data64 & 0xffff) * 8;
+
+ unicode_encoding = spotlight_get_utf16_string_encoding(tvb, offset + 16, query_length - 8, encoding);
+ mark_exists = (unicode_encoding & ENC_UTF_16);
+ unicode_encoding &= ~ENC_UTF_16;
+
+ item_query = proto_tree_add_text(tree, tvb, offset, query_length + 8,
+ "%s, toc index: %u, utf-16 string: '%s'",
+ spotlight_get_cpx_qtype_string(complex_query_type),
+ toc_index + 1,
+ tvb_get_ephemeral_unicode_string(tvb, offset + (mark_exists ? 18 : 16),
+ query_length - (mark_exists? 10 : 8), unicode_encoding));
+ break;
+ default:
+ subquery_count = 1;
+ item_query = proto_tree_add_text(tree, tvb, offset, query_length,
+ "type: %s (%s), toc index: %u, children: %u",
+ spotlight_get_qtype_string(query_type),
+ spotlight_get_cpx_qtype_string(complex_query_type),
+ toc_index + 1,
+ subquery_count);
+ break;
+ }
+
+ sub_tree = proto_item_add_subtree(item_query, ett_afp_spotlight_query_line);
+ offset += 8;
+ offset = spotlight_dissect_query_loop(tvb, pinfo, sub_tree, offset, complex_query_type, subquery_count, toc_offset, encoding);
+ count--;
+ break;
+ case SQ_TYPE_NULL:
+ subquery_count = (gint)(query_data64 >> 32);
+ if (subquery_count > count) {
+ item_query = proto_tree_add_text(tree, tvb, offset, query_length, "null");
+ expert_add_info_format(pinfo, item_query, PI_MALFORMED, PI_ERROR,
+ "Subquery count (%d) > query count (%d)", subquery_count, count);
+ count = 0;
+ } else if (subquery_count > 20) {
+ item_query = proto_tree_add_text(tree, tvb, offset, query_length, "null");
+ expert_add_info_format(pinfo, item_query, PI_PROTOCOL, PI_WARN,
+ "Abnormal number of subqueries (%d)", subquery_count);
+ count -= subquery_count;
+ } else {
+ for (i = 0; i < subquery_count; i++, count--)
+ proto_tree_add_text(tree, tvb, offset, query_length, "null");
+ }
+ offset += query_length;
+ break;
+ case SQ_TYPE_BOOL:
+ proto_tree_add_text(tree, tvb, offset, query_length, "bool: %s",
+ (query_data64 >> 32) ? "true" : "false");
+ count--;
+ offset += query_length;
+ break;
+ case SQ_TYPE_INT64:
+ item_query = proto_tree_add_text(tree, tvb, offset, 8, "int64");
+ sub_tree = proto_item_add_subtree(item_query, ett_afp_spotlight_query_line);
+ j = spotlight_int64(tvb, sub_tree, offset, encoding);
+ count -= j;
+ offset += query_length;
+ break;
+ case SQ_TYPE_UUID:
+ item_query = proto_tree_add_text(tree, tvb, offset, 8, "UUID");
+ sub_tree = proto_item_add_subtree(item_query, ett_afp_spotlight_query_line);
+ j = spotlight_uuid(tvb, sub_tree, offset, encoding);
+ count -= j;
+ offset += query_length;
+ break;
+ case SQ_TYPE_FLOAT:
+ item_query = proto_tree_add_text(tree, tvb, offset, 8, "float");
+ sub_tree = proto_item_add_subtree(item_query, ett_afp_spotlight_query_line);
+ j = spotlight_float(tvb, sub_tree, offset, encoding);
+ count -= j;
+ offset += query_length;
+ break;
+ case SQ_TYPE_DATA:
+ switch (cpx_query_type) {
+ case SQ_CPX_TYPE_STRING:
+ proto_tree_add_text(tree, tvb, offset, query_length, "string: '%s'",
+ tvb_get_ephemeral_string(tvb, offset + 8, query_length - 8));
+ break;
+ case SQ_CPX_TYPE_UTF16_STRING: {
+ /* description see above */
+ unicode_encoding = spotlight_get_utf16_string_encoding(tvb, offset + 8, query_length, encoding);
+ mark_exists = (unicode_encoding & ENC_UTF_16);
+ unicode_encoding &= ~ENC_UTF_16;
+
+ proto_tree_add_text(tree, tvb, offset, query_length, "utf-16 string: '%s'",
+ tvb_get_ephemeral_unicode_string(tvb, offset + (mark_exists ? 10 : 8),
+ query_length - (mark_exists? 10 : 8), unicode_encoding));
+ break;
+ }
+ case SQ_CPX_TYPE_FILEMETA:
+ if (query_length <= 8) {
+ /* item_query = */ proto_tree_add_text(tree, tvb, offset, query_length, "filemeta (empty)");
+ } else {
+ item_query = proto_tree_add_text(tree, tvb, offset, query_length, "filemeta");
+ sub_tree = proto_item_add_subtree(item_query, ett_afp_spotlight_query_line);
+ (void)dissect_spotlight(tvb, pinfo, sub_tree, offset + 8);
+ }
+ break;
+ }
+ count--;
+ offset += query_length;
+ break;
+ case SQ_TYPE_CNIDS:
+ if (query_length <= 8) {
+ /* item_query = */ proto_tree_add_text(tree, tvb, offset, query_length, "CNID Array (empty)");
+ } else {
+ item_query = proto_tree_add_text(tree, tvb, offset, query_length, "CNID Array");
+ sub_tree = proto_item_add_subtree(item_query, ett_afp_spotlight_query_line);
+ spotlight_CNID_array(tvb, sub_tree, offset + 8, encoding);
+ }
+ count--;
+ offset += query_length;
+ break;
+ case SQ_TYPE_DATE:
+ if ((j = spotlight_date(tvb, pinfo, tree, offset, encoding)) == -1)
+ return offset;
+ count -= j;
+ offset += query_length;
+ break;
+ default:
+ proto_tree_add_text(tree, tvb, offset, query_length, "type: %s",
+ spotlight_get_qtype_string(query_type));
+ count--;
+ offset += query_length;
+ break;
+ }
+ }
+
+ return offset;
+}
+
+static gint
+dissect_spotlight(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gint offset)
+{
+ guint encoding;
+ gint i;
+ guint64 toc_offset;
+ guint64 querylen;
+ gint toc_entries;
+ guint64 toc_entry;
+
+ proto_item *item_queries_data;
+ proto_tree *sub_tree_queries;
+ proto_item *item_toc;
+ proto_tree *sub_tree_toc;
+
+ if (strncmp(tvb_get_ephemeral_string(tvb, offset, 8), "md031234", 8) == 0)
+ encoding = ENC_BIG_ENDIAN;
+ else
+ encoding = ENC_LITTLE_ENDIAN;
+ proto_tree_add_text(tree,
+ tvb,
+ offset,
+ 8,
+ "Endianess: %s",
+ encoding == ENC_BIG_ENDIAN ?
+ "Big Endian" : "Litte Endian");
+ offset += 8;
+
+ toc_offset = (spotlight_ntoh64(tvb, offset, encoding) >> 32) * 8;
+ if (toc_offset < 8) {
+ proto_tree_add_text(tree,
+ tvb,
+ offset,
+ 8,
+ "ToC Offset: %" G_GINT64_MODIFIER "u < 8 (bogus)",
+ toc_offset);
+ return -1;
+ }
+ toc_offset -= 8;
+ if (offset + toc_offset + 8 > G_MAXINT) {
+ proto_tree_add_text(tree,
+ tvb,
+ offset,
+ 8,
+ "ToC Offset: %" G_GINT64_MODIFIER "u > %u (bogus)",
+ toc_offset,
+ G_MAXINT - 8 - offset);
+ return -1;
+ }
+ querylen = (spotlight_ntoh64(tvb, offset, encoding) & 0xffffffff) * 8;
+ if (querylen < 8) {
+ proto_tree_add_text(tree,
+ tvb,
+ offset,
+ 8,
+ "ToC Offset: %" G_GINT64_MODIFIER "u Bytes, Query length: %" G_GINT64_MODIFIER "u < 8 (bogus)",
+ toc_offset,
+ querylen);
+ return -1;
+ }
+ querylen -= 8;
+ if (querylen > G_MAXINT) {
+ proto_tree_add_text(tree,
+ tvb,
+ offset,
+ 8,
+ "ToC Offset: %" G_GINT64_MODIFIER "u Bytes, Query length: %" G_GINT64_MODIFIER "u > %u (bogus)",
+ toc_offset,
+ querylen,
+ G_MAXINT);
+ return -1;
+ }
+ proto_tree_add_text(tree,
+ tvb,
+ offset,
+ 8,
+ "ToC Offset: %" G_GINT64_MODIFIER "u Bytes, Query length: %" G_GINT64_MODIFIER "u Bytes",
+ toc_offset,
+ querylen);
+ offset += 8;
+
+ toc_entries = (gint)(spotlight_ntoh64(tvb, offset + (gint)toc_offset, encoding) & 0xffff);
+
+ item_queries_data = proto_tree_add_text(tree,
+ tvb,
+ offset,
+ (gint)toc_offset,
+ "Spotlight RPC data");
+ sub_tree_queries = proto_item_add_subtree(item_queries_data, ett_afp_spotlight_queries);
+
+ /* Queries */
+ offset = spotlight_dissect_query_loop(tvb, pinfo, sub_tree_queries, offset, SQ_CPX_TYPE_ARRAY, INT_MAX, offset + (gint)toc_offset + 8, encoding);
+
+ /* ToC */
+ if (toc_entries < 1) {
+ proto_tree_add_text(tree,
+ tvb,
+ offset,
+ (gint)querylen - (gint)toc_offset,
+ "Complex types ToC (%u < 1 - bogus)",
+ toc_entries);
+ return -1;
+ }
+ toc_entries -= 1;
+ item_toc = proto_tree_add_text(tree,
+ tvb,
+ offset,
+ (gint)querylen - (gint)toc_offset,
+ "Complex types ToC (%u entries)",
+ toc_entries);
+ sub_tree_toc = proto_item_add_subtree(item_toc, ett_afp_spotlight_toc);
+ proto_tree_add_text(sub_tree_toc, tvb, offset, 2, "Number of entries (%u)", toc_entries);
+ proto_tree_add_text(sub_tree_toc, tvb, offset + 2, 2, "unknown");
+ proto_tree_add_text(sub_tree_toc, tvb, offset + 4, 4, "unknown");
+
+ offset += 8;
+ for (i = 0; i < toc_entries; i++, offset += 8) {
+ toc_entry = spotlight_ntoh64(tvb, offset, encoding);
+ if ((((toc_entry & 0xffff0000) >> 16) == SQ_CPX_TYPE_ARRAY)
+ || (((toc_entry & 0xffff0000) >> 16) == SQ_CPX_TYPE_DICT)) {
+ proto_tree_add_text(sub_tree_toc,
+ tvb,
+ offset,
+ 8,
+ "%u: count: %" G_GINT64_MODIFIER "u, type: %s, offset: %" G_GINT64_MODIFIER "u",
+ i+1,
+ toc_entry >> 32,
+ spotlight_get_cpx_qtype_string((toc_entry & 0xffff0000) >> 16),
+ (toc_entry & 0xffff) * 8);
+ } else if ((((toc_entry & 0xffff0000) >> 16) == SQ_CPX_TYPE_STRING)
+ || (((toc_entry & 0xffff0000) >> 16) == SQ_CPX_TYPE_UTF16_STRING)) {
+ proto_tree_add_text(sub_tree_toc,
+ tvb,
+ offset,
+ 8,
+ "%u: pad byte count: %" G_GINT64_MODIFIER "x, type: %s, offset: %" G_GINT64_MODIFIER "u",
+ i+1,
+ 8 - (toc_entry >> 32),
+ spotlight_get_cpx_qtype_string((toc_entry & 0xffff0000) >> 16),
+ (toc_entry & 0xffff) * 8);
+ }
+ else {
+ proto_tree_add_text(sub_tree_toc,
+ tvb,
+ offset,
+ 8,
+ "%u: unknown: 0x%08" G_GINT64_MODIFIER "x, type: %s, offset: %" G_GINT64_MODIFIER "u",
+ i+1,
+ toc_entry >> 32,
+ spotlight_get_cpx_qtype_string((toc_entry & 0xffff0000) >> 16),
+ (toc_entry & 0xffff) * 8);
+ }
+
+
+ }
+
+ return offset;
+}
+
+static gint
+dissect_query_afp_spotlight(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gint offset, afp_request_val *request_val)
+{
+ gint len;
+
+ PAD(1);
+ offset = decode_vol(tree, tvb, offset);
+
+ proto_tree_add_item(tree, hf_afp_spotlight_request_flags, tvb, offset, 4, ENC_BIG_ENDIAN);
+ offset += 4;
+
+ proto_tree_add_item(tree, hf_afp_spotlight_request_command, tvb, offset, 4, ENC_BIG_ENDIAN);
+ offset += 4;
+
+ proto_tree_add_item(tree, hf_afp_spotlight_request_reserved, tvb, offset, 4, ENC_BIG_ENDIAN);
+ offset += 4;
+
+ switch (request_val->spotlight_req_command) {
+
+ case SPOTLIGHT_CMD_GET_VOLPATH:
+ tvb_get_ephemeral_stringz(tvb, offset, &len);
+ proto_tree_add_item(tree, hf_afp_spotlight_volpath_client, tvb, offset, len, ENC_UTF_8|ENC_NA);
+ offset += len;
+ break;
+
+ case SPOTLIGHT_CMD_GET_VOLID:
+ /* empty */
+ break;
+
+ case SPOTLIGHT_CMD_GET_THREE:
+ proto_tree_add_item(tree, hf_afp_spotlight_volflags, tvb, offset, 4, ENC_BIG_ENDIAN);
+ offset += 4;
+
+ proto_tree_add_item(tree, hf_afp_spotlight_reqlen, tvb, offset, 4, ENC_BIG_ENDIAN);
+ offset += 4;
+
+ offset = dissect_spotlight(tvb, pinfo, tree, offset);
+
+ break;
+ }
+ return offset;
+}
+
/* ************************** */
static guint16
decode_acl_list_bitmap(tvbuff_t *tvb, proto_tree *tree, gint offset)
proto_tree *sub_tree;
proto_item *item;
- item = proto_tree_add_item(tree, hf_afp_acl_list_bitmap, tvb, offset, 2,FALSE);
+ item = proto_tree_add_item(tree, hf_afp_acl_list_bitmap, tvb, offset, 2, ENC_BIG_ENDIAN);
sub_tree = proto_item_add_subtree(item, ett_afp_acl_list_bitmap);
- proto_tree_add_item(sub_tree, hf_afp_acl_list_bitmap_UUID, tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_acl_list_bitmap_GRPUUID, tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_acl_list_bitmap_ACL, tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_acl_list_bitmap_REMOVEACL, tvb, offset, 2,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_acl_list_bitmap_Inherit, tvb, offset, 2,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_acl_list_bitmap_UUID, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_acl_list_bitmap_GRPUUID, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_acl_list_bitmap_ACL, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_acl_list_bitmap_REMOVEACL, tvb, offset, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_acl_list_bitmap_Inherit, tvb, offset, 2, ENC_BIG_ENDIAN);
}
return bitmap;
proto_tree *sub_tree;
proto_item *item;
- item = proto_tree_add_item(tree, hf_afp_ace_flags, tvb, offset, 4,FALSE);
+ item = proto_tree_add_item(tree, hf_afp_ace_flags, tvb, offset, 4, ENC_BIG_ENDIAN);
sub_tree = proto_item_add_subtree(item, ett_afp_ace_flags);
- proto_tree_add_item(sub_tree, hf_afp_ace_flags_allow, tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_ace_flags_deny, tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_ace_flags_inherited, tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_ace_flags_fileinherit, tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_ace_flags_dirinherit, tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_ace_flags_limitinherit, tvb, offset, 4,FALSE);
- proto_tree_add_item(sub_tree, hf_afp_ace_flags_onlyinherit, tvb, offset, 4,FALSE);
+ proto_tree_add_item(sub_tree, hf_afp_ace_flags_allow, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_ace_flags_deny, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_ace_flags_inherited, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_ace_flags_fileinherit, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_ace_flags_dirinherit, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_ace_flags_limitinherit, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(sub_tree, hf_afp_ace_flags_onlyinherit, tvb, offset, 4, ENC_BIG_ENDIAN);
}
return bitmap;
{
/* FIXME: preliminary decoding... */
if (tree) {
- proto_tree_add_item(tree, hf_afp_UUID, tvb, offset, 16,FALSE);
+ proto_tree_add_item(tree, hf_afp_UUID, tvb, offset, 16, ENC_BIG_ENDIAN);
offset += 16;
decode_ace_flags_bitmap(tvb, tree, offset);
static gint
decode_kauth_acl(tvbuff_t *tvb, proto_tree *tree, gint offset)
{
- int entries;
- int i;
+ int entries;
+ int i;
proto_tree *sub_tree;
proto_tree *ace_tree;
proto_item *item;
/* FIXME: preliminary decoding... */
entries = tvb_get_ntohl(tvb, offset);
- item = proto_tree_add_text(tree, tvb, offset, 4, "ACEs : %d", entries);
+ item = proto_tree_add_item(tree, hf_afp_acl_entrycount, tvb, offset, 4, ENC_BIG_ENDIAN);
sub_tree = proto_item_add_subtree(item, ett_afp_ace_entries);
offset += 4;
- proto_tree_add_item(tree, hf_afp_acl_flags, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_acl_flags, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
for (i = 0; i < entries; i++) {
PAD(1);
if ((bitmap & kFileSec_UUID)) {
- proto_tree_add_item(tree, hf_afp_UUID, tvb, offset, 16, FALSE);
+ proto_tree_add_item(tree, hf_afp_UUID, tvb, offset, 16, ENC_BIG_ENDIAN);
offset += 16;
}
if ((bitmap & kFileSec_GRPUUID)) {
- proto_tree_add_item(tree, hf_afp_UUID, tvb, offset, 16, FALSE);
+ proto_tree_add_item(tree, hf_afp_GRPUUID, tvb, offset, 16, ENC_BIG_ENDIAN);
offset += 16;
}
decode_acl_list_bitmap(tvb, tree, offset);
offset += 2;
- proto_tree_add_item(tree, hf_afp_max_reply_size32, tvb, offset, 4,FALSE);
+ proto_tree_add_item(tree, hf_afp_max_reply_size32, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
offset = decode_name(tree, pinfo, tvb, offset);
return offset;
}
+/* ************************** */
+static gint
+dissect_reply_afp_spotlight(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gint offset, afp_request_val *request_val)
+{
+ gint len;
+
+ switch (request_val->spotlight_req_command) {
+
+ case SPOTLIGHT_CMD_GET_VOLPATH:
+ proto_tree_add_item(tree, hf_afp_vol_id, tvb, offset, 4, ENC_BIG_ENDIAN);
+ offset += 4;
+
+ proto_tree_add_item(tree, hf_afp_spotlight_reply_reserved, tvb, offset, 4, ENC_BIG_ENDIAN);
+ offset += 4;
+
+ tvb_get_ephemeral_stringz(tvb, offset, &len);
+ proto_tree_add_item(tree, hf_afp_spotlight_volpath_server, tvb, offset, len, ENC_UTF_8|ENC_NA);
+ offset += len;
+ break;
+
+ case SPOTLIGHT_CMD_GET_VOLID:
+ proto_tree_add_item(tree, hf_afp_spotlight_volflags, tvb, offset, 4, ENC_BIG_ENDIAN);
+ offset += 4;
+ break;
+
+ case SPOTLIGHT_CMD_GET_THREE:
+ proto_tree_add_item(tree, hf_afp_spotlight_returncode, tvb, offset, 4, ENC_BIG_ENDIAN);
+ offset += 4;
+
+ offset = dissect_spotlight(tvb, pinfo, tree, offset);
+ break;
+ }
+ return offset;
+}
+
+
/* ************************** */
static void
dissect_afp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
- struct aspinfo *aspinfo = pinfo->private_data;
+ struct aspinfo *aspinfo = (struct aspinfo*)pinfo->private_data;
proto_tree *afp_tree = NULL;
proto_item *ti;
conversation_t *conversation;
if (!request_val && !aspinfo->reply) {
afp_command = tvb_get_guint8(tvb, offset);
- new_request_key = se_alloc(sizeof(afp_request_key));
+ new_request_key = se_new(afp_request_key);
*new_request_key = request_key;
- request_val = se_alloc(sizeof(afp_request_val));
+ request_val = se_new(afp_request_val);
request_val->command = afp_command;
+
+ if (afp_command == AFP_SPOTLIGHTRPC)
+ request_val->spotlight_req_command = tvb_get_ntohl(tvb, offset + 2 + 2 + 4);
+ else
+ request_val->spotlight_req_command = -1;
+
request_val->frame_req = pinfo->fd->num;
request_val->frame_res = 0;
request_val->req_time=pinfo->fd->abs_ts;
afp_command = request_val->command;
col_add_fstr(pinfo->cinfo, COL_INFO, "%s %s",
- val_to_str(afp_command, CommandCode_vals,
+ val_to_str_ext(afp_command, &CommandCode_vals_ext,
"Unknown command (%u)"),
aspinfo->reply ? "reply" : "request");
if (aspinfo->reply && aspinfo->code != 0) {
col_append_fstr(pinfo->cinfo, COL_INFO, ": %s (%d)",
- val_to_str(aspinfo->code, asp_error_vals,
+ val_to_str_ext(aspinfo->code, &asp_error_vals_ext,
"Unknown error (%u)"), aspinfo->code);
}
if (tree)
{
- ti = proto_tree_add_item(tree, proto_afp, tvb, offset, -1,FALSE);
+ ti = proto_tree_add_item(tree, proto_afp, tvb, offset, -1, ENC_NA);
afp_tree = proto_item_add_subtree(ti, ett_afp);
}
if (!aspinfo->reply) {
offset++;
switch(afp_command) {
case AFP_BYTELOCK:
- offset = dissect_query_afp_byte_lock(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_byte_lock(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_BYTELOCK_EXT:
- offset = dissect_query_afp_byte_lock_ext(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_byte_lock_ext(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_OPENDT: /* same as close vol */
case AFP_FLUSH:
case AFP_CLOSEVOL:
- offset = dissect_query_afp_with_vol_id(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_with_vol_id(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_CLOSEDIR:
- /* offset = dissect_query_afp_close_dir(tvb, pinfo, afp_tree, offset);break; */
+ /* offset = dissect_query_afp_close_dir(tvb, pinfo, afp_tree, offset); */
break;
case AFP_CLOSEDT:
- offset = dissect_query_afp_close_dt(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_close_dt(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_FLUSHFORK: /* same packet as closefork */
case AFP_SYNCFORK:
case AFP_CLOSEFORK:
- offset = dissect_query_afp_with_fork(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_with_fork(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_COPYFILE:
- offset = dissect_query_afp_copy_file(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_copy_file(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_CREATEFILE:
- offset = dissect_query_afp_create_file(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_create_file(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_DISCTOLDSESS:
- offset = dissect_query_afp_disconnect_old_session(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_disconnect_old_session(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_ENUMERATE_EXT2:
- offset = dissect_query_afp_enumerate_ext2(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_enumerate_ext2(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_ENUMERATE_EXT:
case AFP_ENUMERATE:
- offset = dissect_query_afp_enumerate(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_enumerate(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_GETFORKPARAM:
- offset = dissect_query_afp_get_fork_param(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_get_fork_param(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_GETSESSTOKEN:
- offset = dissect_query_afp_get_session_token(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_get_session_token(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_GETUSERINFO:
- offset = dissect_query_afp_get_user_info(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_get_user_info(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_GETSRVINFO:
- /* offset = dissect_query_afp_get_server_info(tvb, pinfo, afp_tree, offset);break; */
+ /* offset = dissect_query_afp_get_server_info(tvb, pinfo, afp_tree, offset); */
+ break;
case AFP_GETSRVPARAM:
break; /* no parameters */
case AFP_GETVOLPARAM:
- offset = dissect_query_afp_get_vol_param(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_get_vol_param(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_LOGIN_EXT:
- offset = dissect_query_afp_login_ext(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_login_ext(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_LOGIN:
- offset = dissect_query_afp_login(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_login(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_LOGINCONT:
case AFP_LOGOUT:
break;
case AFP_MAPID:
- offset = dissect_query_afp_map_id(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_map_id(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_MAPNAME:
- offset = dissect_query_afp_map_name(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_map_name(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_MOVE:
- offset = dissect_query_afp_move(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_move(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_OPENVOL:
- offset = dissect_query_afp_open_vol(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_open_vol(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_OPENDIR:
break;
case AFP_OPENFORK:
- offset = dissect_query_afp_open_fork(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_open_fork(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_READ:
- offset = dissect_query_afp_read(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_read(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_READ_EXT:
- offset = dissect_query_afp_read_ext(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_read_ext(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_RENAME:
- offset = dissect_query_afp_rename(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_rename(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_SETDIRPARAM:
- offset = dissect_query_afp_set_dir_param(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_set_dir_param(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_SETFILEPARAM:
- offset = dissect_query_afp_set_file_param(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_set_file_param(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_SETFORKPARAM:
- offset = dissect_query_afp_set_fork_param(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_set_fork_param(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_SETVOLPARAM:
- offset = dissect_query_afp_set_vol_param(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_set_vol_param(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_WRITE:
- offset = dissect_query_afp_write(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_write(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_WRITE_EXT:
- offset = dissect_query_afp_write_ext(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_write_ext(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_GETFLDRPARAM:
- offset = dissect_query_afp_get_fldr_param(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_get_fldr_param(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_SETFLDRPARAM:
- offset = dissect_query_afp_set_fldr_param(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_set_fldr_param(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_CHANGEPW:
break;
case AFP_GETSRVRMSG:
- offset = dissect_query_afp_get_server_message(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_get_server_message(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_DELETE: /* same as create_id */
case AFP_CREATEDIR:
case AFP_CREATEID:
- offset = dissect_query_afp_create_id(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_create_id(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_DELETEID:
- offset = dissect_query_afp_delete_id(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_delete_id(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_RESOLVEID:
- offset = dissect_query_afp_resolve_id(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_resolve_id(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_EXCHANGEFILE:
- offset = dissect_query_afp_exchange_file(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_exchange_file(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_CATSEARCH_EXT:
- offset = dissect_query_afp_cat_search_ext(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_cat_search_ext(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_CATSEARCH:
- offset = dissect_query_afp_cat_search(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_cat_search(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_GETICON:
- offset = dissect_query_afp_get_icon(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_get_icon(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_GTICNINFO:
- offset = dissect_query_afp_get_icon_info(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_get_icon_info(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_ADDAPPL:
- offset = dissect_query_afp_add_appl(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_add_appl(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_RMVAPPL:
- offset = dissect_query_afp_rmv_appl(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_rmv_appl(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_GETAPPL:
- offset = dissect_query_afp_get_appl(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_get_appl(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_ADDCMT:
- offset = dissect_query_afp_add_cmt(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_add_cmt(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_RMVCMT: /* same as get_cmt */
case AFP_GETCMT:
- offset = dissect_query_afp_get_cmt(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_get_cmt(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_ADDICON:
- offset = dissect_query_afp_add_icon(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_add_icon(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_GETEXTATTR:
- offset = dissect_query_afp_get_ext_attr(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_get_ext_attr(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_SETEXTATTR:
- offset = dissect_query_afp_set_ext_attr(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_set_ext_attr(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_LISTEXTATTR:
- offset = dissect_query_afp_list_ext_attrs(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_list_ext_attrs(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_REMOVEATTR:
- offset = dissect_query_afp_remove_ext_attr(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_remove_ext_attr(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_GETACL:
- offset = dissect_query_afp_get_acl(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_get_acl(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_SETACL:
- offset = dissect_query_afp_set_acl(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_set_acl(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_ACCESS:
- offset = dissect_query_afp_access(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_access(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_SYNCDIR:
- offset = dissect_query_afp_with_did(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_query_afp_with_did(tvb, pinfo, afp_tree, offset);
+ break;
+ case AFP_SPOTLIGHTRPC:
+ offset = dissect_query_afp_spotlight(tvb, pinfo, afp_tree, offset, request_val);
+ if (offset == -1)
+ return; /* bogus spotlight RPC */
+ break;
}
}
else {
switch(afp_command) {
case AFP_BYTELOCK:
- offset = dissect_reply_afp_byte_lock(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_byte_lock(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_BYTELOCK_EXT:
- offset = dissect_reply_afp_byte_lock_ext(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_byte_lock_ext(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_ENUMERATE_EXT2:
case AFP_ENUMERATE_EXT:
- offset = dissect_reply_afp_enumerate_ext(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_enumerate_ext(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_ENUMERATE:
- offset = dissect_reply_afp_enumerate(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_enumerate(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_OPENVOL:
- offset = dissect_reply_afp_open_vol(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_open_vol(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_OPENFORK:
- offset = dissect_reply_afp_open_fork(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_open_fork(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_RESOLVEID:
case AFP_GETFORKPARAM:
- offset =dissect_reply_afp_get_fork_param(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_get_fork_param(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_GETUSERINFO:
- offset = dissect_reply_afp_get_user_info(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_get_user_info(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_GETSRVPARAM:
- offset = dissect_reply_afp_get_server_param(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_get_server_param(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_GETSRVRMSG:
- offset = dissect_reply_afp_get_server_message(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_get_server_message(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_CREATEDIR:
- offset = dissect_reply_afp_create_dir(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_create_dir(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_MAPID:
- offset = dissect_reply_afp_map_id(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_map_id(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_MAPNAME:
- offset = dissect_reply_afp_map_name(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_map_name(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_MOVE: /* same as create_id */
case AFP_CREATEID:
- offset = dissect_reply_afp_create_id(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_create_id(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_GETSESSTOKEN:
- offset = dissect_reply_afp_get_session_token(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_get_session_token(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_GETVOLPARAM:
- offset = dissect_reply_afp_get_vol_param(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_get_vol_param(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_GETFLDRPARAM:
- offset = dissect_reply_afp_get_fldr_param(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_get_fldr_param(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_OPENDT:
- offset = dissect_reply_afp_open_dt(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_open_dt(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_CATSEARCH_EXT:
- offset = dissect_reply_afp_cat_search_ext(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_cat_search_ext(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_CATSEARCH:
- offset = dissect_reply_afp_cat_search(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_cat_search(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_GTICNINFO:
- offset = dissect_reply_afp_get_icon_info(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_get_icon_info(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_GETAPPL:
- offset = dissect_reply_afp_get_appl(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_get_appl(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_GETCMT:
- offset = dissect_reply_afp_get_cmt(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_get_cmt(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_WRITE:
- offset = dissect_reply_afp_write(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_write(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_WRITE_EXT:
- offset = dissect_reply_afp_write_ext(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_write_ext(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_GETEXTATTR:
- offset = dissect_reply_afp_get_ext_attr(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_get_ext_attr(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_LISTEXTATTR:
- offset = dissect_reply_afp_list_ext_attrs(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_list_ext_attrs(tvb, pinfo, afp_tree, offset);
+ break;
case AFP_GETACL:
- offset = dissect_reply_afp_get_acl(tvb, pinfo, afp_tree, offset);break;
+ offset = dissect_reply_afp_get_acl(tvb, pinfo, afp_tree, offset);
+ break;
+ case AFP_SPOTLIGHTRPC:
+ offset = dissect_reply_afp_spotlight(tvb, pinfo, afp_tree, offset, request_val);
+ if (offset == -1)
+ return; /* bogus */
+ break;
}
}
if (offset < len) {
static hf_register_info hf[] = {
{ &hf_afp_command,
{ "Command", "afp.command",
- FT_UINT8, BASE_DEC, VALS(CommandCode_vals), 0x0,
+ FT_UINT8, BASE_DEC|BASE_EXT_STRING, &CommandCode_vals_ext, 0x0,
"AFP function", HFILL }},
{ &hf_afp_pad,
FT_NONE, BASE_NONE, NULL, 0,
"Pad Byte", HFILL }},
- { &hf_afp_AFPVersion,
- { "AFP Version", "afp.AFPVersion",
+ { &hf_afp_Version,
+ { "AFP Version", "afp.Version",
FT_UINT_STRING, BASE_NONE, NULL, 0x0,
"Client AFP version", HFILL }},
"The response to this packet is in this packet", HFILL }},
{ &hf_afp_login_flags,
- { "Flags", "afp.afp_login_flags",
+ { "Flags", "afp.login_flags",
FT_UINT16, BASE_HEX, NULL, 0 /* 0x0FFF*/,
"Login flags", HFILL }},
FT_BOOLEAN, 16, NULL, kFPDeleteInhibitBit,
NULL, HFILL }},
- { &hf_afp_dir_attribute_SetClear,
- { "Set", "afp.dir_attribute.set_clear",
- FT_BOOLEAN, 16, NULL, kFPSetClearBit,
- "Clear/set attribute", HFILL }},
-
{ &hf_afp_file_bitmap_Attributes,
{ "Attributes", "afp.file_bitmap.attributes",
FT_BOOLEAN, 16, NULL, kFPAttributeBit,
{ &hf_afp_file_attribute_MultiUser,
{ "Multi user", "afp.file_attribute.multi_user",
FT_BOOLEAN, 16, NULL, kFPMultiUserBit,
- "multi user", HFILL }},
+ NULL, HFILL }},
{ &hf_afp_file_attribute_System,
{ "System", "afp.file_attribute.system",
{ &hf_afp_file_attribute_RenameInhibit,
{ "Rename inhibit", "afp.file_attribute.rename_inhibit",
FT_BOOLEAN, 16, NULL, kFPRenameInhibitBit,
- "rename inhibit", HFILL }},
+ NULL, HFILL }},
{ &hf_afp_file_attribute_DeleteInhibit,
{ "Delete inhibit", "afp.file_attribute.delete_inhibit",
FT_BOOLEAN, 16, NULL, kFPDeleteInhibitBit,
- "delete inhibit", HFILL }},
+ NULL, HFILL }},
{ &hf_afp_file_attribute_CopyProtect,
{ "Copy protect", "afp.file_attribute.copy_protect",
FT_BOOLEAN, 16, NULL, kFPCopyProtectBit,
- "copy protect", HFILL }},
+ NULL, HFILL }},
{ &hf_afp_file_attribute_SetClear,
{ "Set", "afp.file_attribute.set_clear",
FT_BOOLEAN, 32, NULL, 0x80000000,
NULL, HFILL }},
- { &hf_afp_request_bitmap,
- { "Request bitmap", "afp.request_bitmap",
- FT_UINT32, BASE_HEX, NULL, 0x0,
- NULL, HFILL }},
-
{ &hf_afp_struct_size,
{ "Struct size", "afp.struct_size",
FT_UINT8, BASE_DEC, NULL,0,
FT_UINT32, BASE_DEC, NULL, 0x0,
"Offset of the last byte written", HFILL }},
- { &hf_afp_actual_count,
- { "Count", "afp.actual_count",
- FT_INT32, BASE_DEC, NULL, 0x0,
- "Number of bytes returned by read/write", HFILL }},
-
{ &hf_afp_ofork_len,
{ "New length", "afp.ofork_len",
FT_INT32, BASE_DEC, NULL, 0x0,
{ &hf_afp_path_unicode_hint,
{ "Unicode hint", "afp.path_unicode_hint",
- FT_UINT32, BASE_HEX, VALS(unicode_hint_vals), 0x0,
+ FT_UINT32, BASE_HEX|BASE_EXT_STRING, &unicode_hint_vals_ext, 0x0,
NULL, HFILL }},
{ &hf_afp_path_name,
FT_UINT_STRING, BASE_NONE, NULL, 0x0,
"File/folder comment", HFILL }},
+ /*
+ * XXX - should this be a type that's displayed as
+ * text if it's all printable ASCII and hex otherwise,
+ * or something such as that?
+ */
{ &hf_afp_file_creator,
{ "File creator", "afp.file_creator",
FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }},
+ /*
+ * XXX - should this be a type that's displayed as
+ * text if it's all printable ASCII and hex otherwise,
+ * or something such as that?
+ */
{ &hf_afp_file_type,
{ "File type", "afp.file_type",
FT_STRING, BASE_NONE, NULL, 0x0,
{ &hf_afp_cat_position,
{ "Position", "afp.cat_position",
FT_BYTES, BASE_NONE, NULL, 0x0,
- "Reserved", HFILL }},
+ "Catalog position", HFILL }},
{ &hf_afp_map_name_type,
{ "Type", "afp.map_name_type",
- FT_UINT8, BASE_DEC, VALS(map_name_type_vals), 0x0,
+ FT_UINT8, BASE_DEC|BASE_EXT_STRING, &map_name_type_vals_ext, 0x0,
"Map name type", HFILL }},
{ &hf_afp_map_id_type,
{ "Type", "afp.map_id_type",
- FT_UINT8, BASE_DEC, VALS(map_id_type_vals), 0x0,
+ FT_UINT8, BASE_DEC|BASE_EXT_STRING, &map_id_type_vals_ext, 0x0,
"Map ID type", HFILL }},
{ &hf_afp_map_id,
{ &hf_afp_session_token_type,
{ "Type", "afp.session_token_type",
- FT_UINT16, BASE_HEX, VALS(token_type_vals), 0x0,
+ FT_UINT16, BASE_HEX|BASE_EXT_STRING, &token_type_vals_ext, 0x0,
"Session token type", HFILL }},
/* FIXME FT_UINT32 in specs */
{ &hf_afp_UUID,
{ "UUID", "afp.uuid",
- FT_BYTES, BASE_NONE, NULL, 0x0,
+ FT_GUID, BASE_NONE, NULL, 0x0,
NULL, HFILL }},
{ &hf_afp_GRPUUID,
{ "GRPUUID", "afp.grpuuid",
- FT_BYTES, BASE_NONE, NULL, 0x0,
+ FT_GUID, BASE_NONE, NULL, 0x0,
"Group UUID", HFILL }},
{ &hf_afp_user_bitmap,
FT_UINT16, BASE_HEX, NULL, 0,
"Message bitmap", HFILL }},
+ /*
+ * XXX - in the reply, this indicates whether the message
+ * is a server message or a login message.
+ */
{ &hf_afp_message_bitmap_REQ,
{ "Request message", "afp.message_bitmap.requested",
FT_BOOLEAN, 16, NULL, 0x01,
"Inherit ACL", HFILL }},
{ &hf_afp_acl_entrycount,
- { "Count", "afp.acl_entrycount",
+ { "ACEs count", "afp.acl_entrycount",
FT_UINT32, BASE_HEX, NULL, 0,
"Number of ACL entries", HFILL }},
FT_UINT32, BASE_HEX, NULL, 0,
NULL, HFILL }},
- { &hf_afp_ace_applicable,
- { "ACE", "afp.ace_applicable",
- FT_BYTES, BASE_NONE, NULL, 0x0,
- "ACE applicable", HFILL }},
-
- { &hf_afp_ace_rights,
- { "Rights", "afp.ace_rights",
- FT_UINT32, BASE_HEX, NULL, 0,
- "ACE flags", HFILL }},
-
{ &hf_afp_acl_access_bitmap,
{ "Bitmap", "afp.acl_access_bitmap",
FT_UINT32, BASE_HEX, NULL, 0,
FT_BOOLEAN, 32, NULL, ACE_ONLY_INHERIT,
NULL, HFILL }},
+ { &hf_afp_spotlight_request_flags,
+ { "Flags", "afp.spotlight.flags",
+ FT_UINT32, BASE_HEX, NULL, 0x0,
+ "Spotlight RPC Flags", HFILL }},
+
+ { &hf_afp_spotlight_request_command,
+ { "Command", "afp.spotlight.command",
+ FT_UINT32, BASE_HEX, NULL, 0x0,
+ "Spotlight RPC Command", HFILL }},
+
+ { &hf_afp_spotlight_request_reserved,
+ { "Padding", "afp.spotlight.reserved",
+ FT_UINT32, BASE_HEX, NULL, 0x0,
+ "Spotlight RPC Padding", HFILL }},
+
+ { &hf_afp_spotlight_reply_reserved,
+ { "Reserved", "afp.spotlight.reserved",
+ FT_UINT32, BASE_HEX, NULL, 0x0,
+ "Spotlight RPC Padding", HFILL }},
+
+ { &hf_afp_spotlight_volpath_client,
+ { "Client's volume path", "afp.spotlight.volpath_client",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+
+ { &hf_afp_spotlight_volpath_server,
+ { "Server's volume path", "afp.spotlight.volpath_server",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ "Servers's volume path", HFILL }},
+
+ { &hf_afp_spotlight_returncode,
+ { "Return code", "afp.spotlight.return",
+ FT_INT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+
+ { &hf_afp_spotlight_volflags,
+ { "Volume flags", "afp.spotlight.volflags",
+ FT_UINT32, BASE_HEX, NULL, 0x0,
+ NULL, HFILL }},
+
+ { &hf_afp_spotlight_reqlen,
+ { "Length", "afp.spotlight.reqlen",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+
+ { &hf_afp_spotlight_uuid,
+ { "UUID", "afp.spotlight.uuid",
+ FT_GUID, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+
+ { &hf_afp_spotlight_date,
+ { "Date", "afp.spotlight.date",
+ FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0,
+ NULL, HFILL }},
+
{ &hf_afp_unknown,
{ "Unknown parameter", "afp.unknown",
FT_BYTES, BASE_NONE, NULL, 0x0,
&ett_afp_ace_entries,
&ett_afp_ace_entry,
&ett_afp_ace_flags,
+ &ett_afp_spotlight_queries,
+ &ett_afp_spotlight_query_line,
+ &ett_afp_spotlight_query,
+ &ett_afp_spotlight_data,
+ &ett_afp_spotlight_toc
};
proto_afp = proto_register_protocol("Apple Filing Protocol", "AFP", "afp");