replySessionId = input->session->sessionId;
}
HgfsPackReplyHeaderV4(status, replyPayloadSize, input->op,
- replySessionId, input->id, header);
+ replySessionId, input->id, HGFS_PACKET_FLAG_REPLY,
+ header);
}
} else {
HgfsReply *reply;
char *shareName = NULL;
size_t shareNameLen;
size_t sizeNeeded;
- uint32 flags;
+ uint32 notifyFlags;
LOG(4, ("%s:Entered shr hnd %u hnd %"FMT64"x file %s mask %u\n",
__FUNCTION__, sharedFolder, subscriber, fileName, mask));
packet->metaPacketSize = sizeNeeded;
packet->metaPacket = packetHeader;
packet->dataPacketIsAllocated = TRUE;
- flags = 0;
+ notifyFlags = 0;
if (mask & HGFS_NOTIFY_EVENTS_DROPPED) {
- flags |= HGFS_NOTIFY_FLAG_OVERFLOW;
+ notifyFlags |= HGFS_NOTIFY_FLAG_OVERFLOW;
}
if (!HgfsPackChangeNotificationRequest(packetHeader, subscriber, shareName, fileName, mask,
- flags, session, &sizeNeeded)) {
+ notifyFlags, session, &sizeNeeded)) {
LOG(4, ("%s: failed to pack notification request\n", __FUNCTION__));
goto exit;
}
HgfsOp op, // IN: request type
uint64 sessionId, // IN: session id
uint32 requestId, // IN: request id
+ uint32 hdrFlags, // IN: header flags
HgfsHeader *header); // OUT: packet header
HgfsInternalStatus
*
* HgfsPackReplyHeaderV4 --
*
- * Pack hgfs header that corresponds an incoming packet.
+ * Pack hgfs header that corresponds to an HGFS protocol packet.
*
* Results:
* None.
HgfsOp op, // IN: request type
uint64 sessionId, // IN: session id
uint32 requestId, // IN: request id
+ uint32 hdrFlags, // IN: header flags
HgfsHeader *header) // OUT: outgoing packet header
{
memset(header, 0, sizeof *header);
- header->version = 1;
+ header->version = HGFS_HEADER_VERSION;
header->dummy = HGFS_V4_LEGACY_OPCODE;
header->packetSize = payloadSize + sizeof *header;
header->headerSize = sizeof *header;
header->requestId = requestId;
header->op = op;
header->status = HgfsConvertFromInternalStatus(status);
- header->flags = 0;
+ header->flags = hdrFlags;
header->information = status;
header->sessionId = sessionId;
}
goto exit;
}
- HgfsPackReplyHeaderV4(0,
+ HgfsPackReplyHeaderV4(HGFS_ERROR_SUCCESS,
opBreakRequestSize,
HGFS_OP_OPLOCK_BREAK_V4,
sessionId,
0,
+ HGFS_PACKET_FLAG_REQUEST,
header);
exit:
char const *shareName, // IN: share name
char *fileName, // IN: relative name
uint32 mask, // IN: event mask
- uint32 flags, // IN: notify flags
+ uint32 notifyFlags, // IN: notify flags
HgfsSessionInfo *session, // IN: session
size_t *bufferSize) // INOUT: size of packet
{
ASSERT(packet);
ASSERT(shareName);
ASSERT(NULL != fileName ||
- (flags & HGFS_NOTIFY_FLAG_OVERFLOW) == HGFS_NOTIFY_FLAG_OVERFLOW);
+ (notifyFlags & HGFS_NOTIFY_FLAG_OVERFLOW) == HGFS_NOTIFY_FLAG_OVERFLOW);
ASSERT(session);
ASSERT(bufferSize);
*/
notifyRequest = (HgfsRequestNotifyV4 *)((char *)header + sizeof *header);
notifyRequestSize = HgfsPackChangeNotifyRequestV4(subscriber,
- flags,
+ notifyFlags,
mask,
shareName,
fileName,
*bufferSize - sizeof *header,
notifyRequest);
if (0 != notifyRequestSize) {
- HgfsPackReplyHeaderV4(0, notifyRequestSize, HGFS_OP_NOTIFY_V4, session->sessionId, 0, header);
+ HgfsPackReplyHeaderV4(HGFS_ERROR_SUCCESS,
+ notifyRequestSize,
+ HGFS_OP_NOTIFY_V4,
+ session->sessionId,
+ 0,
+ HGFS_PACKET_FLAG_REQUEST,
+ header);
result = TRUE;
} else {
result = FALSE;
char const *shareName, // IN: share name
char *fileName, // IN: file name
uint32 mask, // IN: event mask
- uint32 flags, // IN: notify flags
+ uint32 notifyFlags, // IN: notify flags
HgfsSessionInfo *session, // IN: session
size_t *bufferSize); // IN/OUT: packet size
HgfsReplySymlinkCreateV3;
/* HGFS protocol version 4 definitions. */
+#define HGFS_HEADER_VERSION_1 1
+#define HGFS_HEADER_VERSION HGFS_HEADER_VERSION_1
/*
- * HGFS_PACKET_FLAG_NOTIFICATION set in flags field means that
- * this is a notification or a callback request (not a reply to client request).
+ * Flags to indicate the type of packet following the header and
+ * the overall state of the operation.
*/
-#define HGFS_PACKET_FLAG_NOTIFICATION (1 << 0)
+#define HGFS_PACKET_FLAG_REQUEST (1 << 0) // Request packet
+#define HGFS_PACKET_FLAG_REPLY (1 << 1) // Reply packet
+#define HGFS_PACKET_FLAG_INFO_EXTERROR (1 << 2) // Info has ext error
typedef
#include "vmware_pack_begin.h"
uint32 requestId; /* Request ID. */
uint32 op; /* Operation. */
uint32 status; /* Return value. */
- uint32 flags; /* Flags. */
+ uint32 flags; /* Flags. See above. */
uint32 information; /* Generic field, used e.g. for native error code. */
uint64 sessionId; /* Session ID. */
uint64 reserved; /* Reserved for future use. */