8394
8393
uint32 mask, // IN: event type
8395
8394
struct HgfsSessionInfo *session) // IN: session info
8396
HgfsPacket *packet = NULL;
8397
HgfsHeader *packetHeader = NULL;
8398
char *shareName = NULL;
8399
size_t shareNameLen;
8398
8400
size_t sizeNeeded;
8400
size_t shareNameLen;
8401
HgfsHeader *packetHeader;
8404
if (HgfsServerGetShareName(sharedFolder, &shareNameLen, &shareName)) {
8406
sizeNeeded = HgfsPackCalculateNotificationSize(shareName, fileName);
8408
packetHeader = Util_SafeCalloc(1, sizeNeeded);
8409
packet = Util_SafeCalloc(1, sizeof *packet);
8410
packet->guestInitiated = FALSE;
8411
packet->metaPacketSize = sizeNeeded;
8412
packet->metaPacket = packetHeader;
8413
packet->dataPacketIsAllocated = TRUE;
8415
if (mask & HGFS_NOTIFY_EVENTS_DROPPED) {
8416
flags |= HGFS_NOTIFY_FLAG_OVERFLOW;
8419
HgfsPackChangeNotificationRequest(packetHeader, subscriber, shareName, fileName, mask,
8420
flags, session, &sizeNeeded);
8421
if (!HgfsPacketSend(packet, (char *)packetHeader, sizeNeeded, session->transportSession, 0)) {
8422
LOG(4, ("%s: failed to send notification to the host\n", __FUNCTION__));
8425
LOG(4, ("%s: notification for folder: %d index: %d file name %s "
8426
" mask %x\n", __FUNCTION__, sharedFolder,
8427
(int)subscriber, fileName, mask));
8403
if (!HgfsServerGetShareName(sharedFolder, &shareNameLen, &shareName)) {
8430
8404
LOG(4, ("%s: failed to find shared folder for a handle %x\n",
8431
8405
__FUNCTION__, sharedFolder));
8409
sizeNeeded = HgfsPackCalculateNotificationSize(shareName, fileName);
8411
packetHeader = Util_SafeCalloc(1, sizeNeeded);
8412
packet = Util_SafeCalloc(1, sizeof *packet);
8413
packet->guestInitiated = FALSE;
8414
packet->metaPacketSize = sizeNeeded;
8415
packet->metaPacket = packetHeader;
8416
packet->dataPacketIsAllocated = TRUE;
8418
if (mask & HGFS_NOTIFY_EVENTS_DROPPED) {
8419
flags |= HGFS_NOTIFY_FLAG_OVERFLOW;
8422
if (!HgfsPackChangeNotificationRequest(packetHeader, subscriber, shareName, fileName, mask,
8423
flags, session, &sizeNeeded)) {
8424
LOG(4, ("%s: failed to pack notification request\n", __FUNCTION__));
8428
if (!HgfsPacketSend(packet, (char *)packetHeader, sizeNeeded, session->transportSession, 0)) {
8429
LOG(4, ("%s: failed to send notification to the host\n", __FUNCTION__));
8433
/* The transport will call the server send complete callback to release the packets. */
8435
packetHeader = NULL;
8437
LOG(4, ("%s: notification for folder: %d index: %"FMT64"u file name %s mask %x\n",
8438
__FUNCTION__, sharedFolder, subscriber, fileName, mask));