]> git.ipfire.org Git - thirdparty/open-vm-tools.git/commitdiff
HGFS: Clean up server packet abstraction part V
authorVMware, Inc <>
Wed, 18 Sep 2013 03:16:49 +0000 (20:16 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Mon, 23 Sep 2013 05:01:53 +0000 (22:01 -0700)
Clean up the packet utility routines to only pass the arguments that are
required. This means we only need to use the HGFS server channel
callbacks and not the whole HGFS server transport session object.

Signed-off-by: Dmitry Torokhov <dtor@vmware.com>
open-vm-tools/lib/hgfsServer/hgfsServer.c
open-vm-tools/lib/hgfsServer/hgfsServerInt.h
open-vm-tools/lib/hgfsServer/hgfsServerPacketUtil.c

index 05aff1d43185e2fadd347f43687df2964432d788..1835bb81820bf2f02cfe74ce014028ca2f98ff7d 100644 (file)
@@ -2973,7 +2973,7 @@ HgfsServerGetRequest(HgfsPacket *packet,                        // IN: packet
    size_t requestOpArgsSize;
    HgfsInternalStatus parseStatus = HGFS_ERROR_SUCCESS;
 
-   request = HSPU_GetMetaPacket(packet, &requestSize, transportSession);
+   request = HSPU_GetMetaPacket(packet, &requestSize, transportSession->channelCbTable);
    ASSERT_DEVEL(request);
 
    if (NULL == request) {
@@ -3091,7 +3091,7 @@ HgfsServerCompleteRequest(HgfsInternalStatus status,   // IN: Status of the requ
 
    replyTotalSize = replySize;
    reply = HSPU_GetReplyPacket(input->packet, &replyTotalSize,
-                               input->transportSession);
+                               input->transportSession->channelCbTable);
 
    ASSERT_DEVEL(reply && (replySize <= replyTotalSize));
    if (!HgfsPackReplyHeader(status, replyPayloadSize, input->sessionEnabled, replySessionId,
@@ -3135,7 +3135,7 @@ HgfsServerProcessRequest(void *context)
    if (!input->request) {
       input->request = HSPU_GetMetaPacket(input->packet,
                                           &input->requestSize,
-                                          input->transportSession);
+                                          input->transportSession->channelCbTable);
    }
 
    input->payload = (char *)input->request + input->payloadOffset;
@@ -3218,7 +3218,7 @@ HgfsServerSessionReceive(HgfsPacket *packet,      // IN: Hgfs Packet
              * Asynchronous processing is supported by the transport.
              * We can release mappings here and reacquire when needed.
              */
-            HSPU_PutMetaPacket(packet, transportSession);
+            HSPU_PutMetaPacket(packet, transportSession->channelCbTable);
             input->request = NULL;
             Atomic_Inc(&gHgfsAsyncCounter);
 
@@ -4418,9 +4418,9 @@ HgfsServerSessionSendComplete(HgfsPacket *packet,   // IN/OUT: Hgfs packet
    HgfsTransportSessionInfo *transportSession = clientData;
 
    if (packet->guestInitiated) {
-      HSPU_PutMetaPacket(packet, transportSession);
-      HSPU_PutReplyPacket(packet, transportSession);
-      HSPU_PutDataPacketBuf(packet, transportSession);
+      HSPU_PutMetaPacket(packet, transportSession->channelCbTable);
+      HSPU_PutReplyPacket(packet, transportSession->channelCbTable);
+      HSPU_PutDataPacketBuf(packet, transportSession->channelCbTable);
    } else {
       free(packet->metaPacket);
       free(packet);
@@ -5752,7 +5752,9 @@ HgfsAllocInitReply(HgfsPacket *packet,           // IN/OUT: Hgfs Packet
       headerSize = sizeof(HgfsReply);
    }
    replyPacketSize = headerSize + replyDataSize;
-   replyHeader = HSPU_GetReplyPacket(packet, &replyPacketSize, session->transportSession);
+   replyHeader = HSPU_GetReplyPacket(packet,
+                                     &replyPacketSize,
+                                     session->transportSession->channelCbTable);
 
    ASSERT_DEVEL(replyHeader && (replyPacketSize >= headerSize + replyDataSize));
 
@@ -5815,7 +5817,7 @@ HgfsServerRead(HgfsInputParam *input)  // IN: Input params
                payload = &reply->payload[0];
             } else {
                payload = HSPU_GetDataPacketBuf(input->packet, BUF_WRITEABLE,
-                                               input->transportSession);
+                                               input->transportSession->channelCbTable);
             }
             if (payload) {
                status = HgfsPlatformReadFile(file, input->session, offset,
@@ -5900,7 +5902,7 @@ HgfsServerWrite(HgfsInputParam *input)  // IN: Input params
    if (NULL == dataToWrite) {
       /* No inline data to write, get it from the transport shared memory. */
       dataToWrite = HSPU_GetDataPacketBuf(input->packet, BUF_READABLE,
-                                          input->transportSession);
+                                          input->transportSession->channelCbTable);
       if (NULL == dataToWrite) {
          LOG(4, ("%s: Error: Op %d mapping write data buffer\n", __FUNCTION__, input->op));
          status = HGFS_ERROR_PROTOCOL;
@@ -7982,7 +7984,7 @@ HgfsServerSearchRead(HgfsInputParam *input)  // IN: Input params
 
       if (inlineDataSize == 0) {
          info.replyPayload = HSPU_GetDataPacketBuf(input->packet, BUF_WRITEABLE,
-                                                   input->transportSession);
+                                                   input->transportSession->channelCbTable);
       } else {
          info.replyPayload = (char *)info.reply + baseReplySize;
       }
index 39513a39510715cdd2112727fe9ed26eb17dfd12..c66f0c8efc1552fe5ec704b0863b6eceac7a6931 100644 (file)
@@ -874,29 +874,29 @@ HgfsPlatformValidateOpen(HgfsFileOpenInfo *openInfo, // IN: Open info struct
                          fileDesc *newHandle);       // OUT: Handle to the file
 
 void *
-HSPU_GetMetaPacket(HgfsPacket *packet,          // IN/OUT: Hgfs Packet
-                   size_t *metaPacketSize,      // OUT: Size of metaPacket
-                   HgfsTransportSessionInfo *transportSession);   // IN: Session Info
+HSPU_GetMetaPacket(HgfsPacket *packet,                   // IN/OUT: Hgfs Packet
+                   size_t *metaPacketSize,               // OUT: Size of metaPacket
+                   HgfsServerChannelCallbacks *chanCb);  // IN: Channel callbacks
 
 void *
-HSPU_GetDataPacketBuf(HgfsPacket *packet,        // IN/OUT: Hgfs Packet
-                      MappingType mappingType,   // IN: Readable/ Writeable ?
-                      HgfsTransportSessionInfo *transportSession); // IN: Session Info
+HSPU_GetDataPacketBuf(HgfsPacket *packet,                   // IN/OUT: Hgfs Packet
+                      MappingType mappingType,              // IN: Readable/ Writeable ?
+                      HgfsServerChannelCallbacks *chanCb);  // IN: Channel callbacks
 
 void
-HSPU_PutDataPacketBuf(HgfsPacket *packet,         // IN/OUT: Hgfs Packet
-                      HgfsTransportSessionInfo *transportSession);  // IN: Session Info
+HSPU_PutDataPacketBuf(HgfsPacket *packet,                   // IN/OUT: Hgfs Packet
+                      HgfsServerChannelCallbacks *chanCb);  // IN: Channel callbacks
 
 void
-HSPU_PutMetaPacket(HgfsPacket *packet,        // IN/OUT: Hgfs Packet
-                   HgfsTransportSessionInfo *transportSession); // IN: Session Info
+HSPU_PutMetaPacket(HgfsPacket *packet,                   // IN/OUT: Hgfs Packet
+                   HgfsServerChannelCallbacks *chanCb);  // IN: Channel callbacks
 
 void *
-HSPU_GetReplyPacket(HgfsPacket *packet,        // IN/OUT: Hgfs Packet
-                    size_t *replyPacketSize,   //IN/OUT: Size of reply Packet
-                    HgfsTransportSessionInfo *transportSession); // IN: Session Info
+HSPU_GetReplyPacket(HgfsPacket *packet,                  // IN/OUT: Hgfs Packet
+                    size_t *replyPacketSize,             //IN/OUT: Size of reply Packet
+                    HgfsServerChannelCallbacks *chanCb); // IN: Channel callbacks
 
 void
-HSPU_PutReplyPacket(HgfsPacket *packet,        // IN/OUT: Hgfs Packet
-                    HgfsTransportSessionInfo *transportSession); // IN: Session Info
+HSPU_PutReplyPacket(HgfsPacket *packet,                  // IN/OUT: Hgfs Packet
+                    HgfsServerChannelCallbacks *chanCb); // IN: Channel callbacks
 #endif /* __HGFS_SERVER_INT_H__ */
index cf5e076a4182f9d9b85801e4d607f51c5283c5b3..3d099d83da8e00b850c137e04ef6100b07cf2c2b 100644 (file)
@@ -39,19 +39,19 @@ static void *HSPUGetBuf(HgfsPacket *packet,
                         size_t bufSize,
                         Bool *isAllocated,
                         MappingType mappingType,
-                        HgfsTransportSessionInfo *transportSession);
+                        HgfsServerChannelCallbacks *chanCb);
 static void HSPUPutBuf(HgfsPacket *packet,
                        uint32 startIndex,
                        void **buf,
                        size_t *bufSize,
                        Bool *isAllocated,
                        MappingType mappingType,
-                       HgfsTransportSessionInfo *transportSession);
+                       HgfsServerChannelCallbacks *chanCb);
 static void HSPUCopyBufToIovec(HgfsPacket *packet,
                                uint32 startIndex,
                                void *buf,
                                size_t bufSize,
-                               HgfsTransportSessionInfo *transportSession);
+                               HgfsServerChannelCallbacks *chanCb);
 
 
 
@@ -72,11 +72,10 @@ static void HSPUCopyBufToIovec(HgfsPacket *packet,
  */
 
 void *
-HSPU_GetReplyPacket(HgfsPacket *packet,        // IN/OUT: Hgfs Packet
-                    size_t *replyPacketSize,   // IN/OUT: Size of reply Packet
-                    HgfsTransportSessionInfo *transportSession)  // IN: Session Info
+HSPU_GetReplyPacket(HgfsPacket *packet,                  // IN/OUT: Hgfs Packet
+                    size_t *replyPacketSize,             // IN/OUT: Size of reply Packet
+                    HgfsServerChannelCallbacks *chanCb)  // IN: Channel callbacks
 {
-   ASSERT(transportSession);
    if (packet->replyPacket) {
       /*
        * When we are transferring packets over backdoor, reply packet
@@ -85,7 +84,7 @@ HSPU_GetReplyPacket(HgfsPacket *packet,        // IN/OUT: Hgfs Packet
       LOG(4, ("Existing reply packet %s %"FMTSZ"u %"FMTSZ"u\n", __FUNCTION__,
               *replyPacketSize, packet->replyPacketSize));
       ASSERT_DEVEL(*replyPacketSize <= packet->replyPacketSize);
-   } else if (transportSession->channelCbTable && transportSession->channelCbTable->getWriteVa) {
+   } else if (chanCb && chanCb->getWriteVa) {
      /* Can we write directly into guest memory? */
       ASSERT_DEVEL(packet->metaPacket);
       if (packet->metaPacket) {
@@ -126,8 +125,8 @@ HSPU_GetReplyPacket(HgfsPacket *packet,        // IN/OUT: Hgfs Packet
  */
 
 void
-HSPU_PutReplyPacket(HgfsPacket *packet,        // IN/OUT: Hgfs Packet
-                    HgfsTransportSessionInfo *transportSession)  // IN: Session Info
+HSPU_PutReplyPacket(HgfsPacket *packet,                  // IN/OUT: Hgfs Packet
+                    HgfsServerChannelCallbacks *chanCb)  // IN: Channel callbacks
 {
    /*
     * If there wasn't an allocated buffer for the reply, there is nothing to
@@ -161,15 +160,15 @@ HSPU_PutReplyPacket(HgfsPacket *packet,        // IN/OUT: Hgfs Packet
  */
 
 void *
-HSPU_GetMetaPacket(HgfsPacket *packet,        // IN/OUT: Hgfs Packet
-                   size_t *metaPacketSize,    // OUT: Size of metaPacket
-                   HgfsTransportSessionInfo *transportSession)  // IN: Session Info
+HSPU_GetMetaPacket(HgfsPacket *packet,                   // IN/OUT: Hgfs Packet
+                   size_t *metaPacketSize,               // OUT: Size of metaPacket
+                   HgfsServerChannelCallbacks *chanCb)   // IN: Channel callbacks
 {
    *metaPacketSize = packet->metaPacketSize;
    return HSPUGetBuf(packet, 0, &packet->metaPacket,
                      packet->metaPacketSize,
                      &packet->metaPacketIsAllocated,
-                     BUF_READWRITEABLE, transportSession);
+                     BUF_READWRITEABLE, chanCb);
 }
 
 
@@ -190,14 +189,15 @@ HSPU_GetMetaPacket(HgfsPacket *packet,        // IN/OUT: Hgfs Packet
  */
 
 void *
-HSPU_GetDataPacketBuf(HgfsPacket *packet,       // IN/OUT: Hgfs Packet
-                      MappingType mappingType,  // IN: Writeable/Readable
-                      HgfsTransportSessionInfo *transportSession) // IN: Session Info
+HSPU_GetDataPacketBuf(HgfsPacket *packet,                   // IN/OUT: Hgfs Packet
+                      MappingType mappingType,              // IN: Writeable/Readable
+                      HgfsServerChannelCallbacks *chanCb)   // IN: Channel callbacks
 {
    packet->dataMappingType = mappingType;
    return HSPUGetBuf(packet, packet->dataPacketIovIndex,
                      &packet->dataPacket, packet->dataPacketSize,
-                     &packet->dataPacketIsAllocated, mappingType, transportSession);
+                     &packet->dataPacketIsAllocated, mappingType,
+                     chanCb);
 }
 
 
@@ -218,13 +218,13 @@ HSPU_GetDataPacketBuf(HgfsPacket *packet,       // IN/OUT: Hgfs Packet
  */
 
 static void *
-HSPUGetBuf(HgfsPacket *packet,           // IN/OUT: Hgfs Packet
-           uint32 startIndex,            // IN: start index of iov
-           void **buf,                   // OUT: Contigous buffer
-           size_t  bufSize,              // IN: Size of buffer
-           Bool *isAllocated,            // OUT: Was buffer allocated ?
-           MappingType mappingType,      // IN: Readable/Writeable ?
-           HgfsTransportSessionInfo *transportSession)     // IN: Session Info
+HSPUGetBuf(HgfsPacket *packet,                  // IN/OUT: Hgfs Packet
+           uint32 startIndex,                   // IN: start index of iov
+           void **buf,                          // OUT: Contigous buffer
+           size_t  bufSize,                     // IN: Size of buffer
+           Bool *isAllocated,                   // OUT: Was buffer allocated ?
+           MappingType mappingType,             // IN: Readable/Writeable ?
+           HgfsServerChannelCallbacks *chanCb)  // IN: Channel callbacks
 {
    uint32 iovCount;
    uint32 iovMapped = 0;
@@ -240,16 +240,16 @@ HSPUGetBuf(HgfsPacket *packet,           // IN/OUT: Hgfs Packet
       return NULL;
    }
 
-   if (!transportSession->channelCbTable) {
+   if (chanCb == NULL) {
       return NULL;
    }
 
    if (mappingType == BUF_WRITEABLE ||
        mappingType == BUF_READWRITEABLE) {
-      getVa = transportSession->channelCbTable->getWriteVa;
+      getVa = chanCb->getWriteVa;
    } else {
       ASSERT(mappingType == BUF_READABLE);
-      getVa = transportSession->channelCbTable->getReadVa;
+      getVa = chanCb->getReadVa;
    }
 
    /* Looks like we are in the middle of poweroff. */
@@ -318,7 +318,7 @@ HSPUGetBuf(HgfsPacket *packet,           // IN/OUT: Hgfs Packet
 
 freeMem:
    for (i = startIndex; i < iovCount; i++) {
-      transportSession->channelCbTable->putVa(&packet->iov[i].context);
+      chanCb->putVa(&packet->iov[i].context);
       packet->iov[i].va = NULL;
    }
 
@@ -343,14 +343,14 @@ freeMem:
  */
 
 void
-HSPU_PutMetaPacket(HgfsPacket *packet,       // IN/OUT: Hgfs Packet
-                   HgfsTransportSessionInfo *transportSession) // IN: Session Info
+HSPU_PutMetaPacket(HgfsPacket *packet,                   // IN/OUT: Hgfs Packet
+                   HgfsServerChannelCallbacks *chanCb)   // IN: Channel callbacks
 {
    LOG(4, ("%s Hgfs Putting Meta packet\n", __FUNCTION__));
    HSPUPutBuf(packet, 0, &packet->metaPacket,
               &packet->metaPacketSize,
               &packet->metaPacketIsAllocated,
-              BUF_WRITEABLE, transportSession);
+              BUF_WRITEABLE, chanCb);
 }
 
 
@@ -371,15 +371,15 @@ HSPU_PutMetaPacket(HgfsPacket *packet,       // IN/OUT: Hgfs Packet
  */
 
 void
-HSPU_PutDataPacketBuf(HgfsPacket *packet,        // IN/OUT: Hgfs Packet
-                      HgfsTransportSessionInfo *transportSession)  // IN: Session Info
+HSPU_PutDataPacketBuf(HgfsPacket *packet,                   // IN/OUT: Hgfs Packet
+                      HgfsServerChannelCallbacks *chanCb)   // IN: Channel callbacks
 {
 
    LOG(4, ("%s Hgfs Putting Data packet\n", __FUNCTION__));
    HSPUPutBuf(packet, packet->dataPacketIovIndex,
                &packet->dataPacket, &packet->dataPacketSize,
                &packet->dataPacketIsAllocated,
-               packet->dataMappingType, transportSession);
+               packet->dataMappingType, chanCb);
 }
 
 
@@ -399,29 +399,29 @@ HSPU_PutDataPacketBuf(HgfsPacket *packet,        // IN/OUT: Hgfs Packet
  */
 
 void
-HSPUPutBuf(HgfsPacket *packet,        // IN/OUT: Hgfs Packet
-           uint32 startIndex,         // IN: Start of iov
-           void **buf,                // IN/OUT: Buffer to be freed
-           size_t *bufSize,           // IN: Size of the buffer
-           Bool *isAllocated,         // IN: Was buffer allocated ?
-           MappingType mappingType,   // IN: Readable / Writeable ?
-           HgfsTransportSessionInfo *transportSession)  // IN: Session info
+HSPUPutBuf(HgfsPacket *packet,                  // IN/OUT: Hgfs Packet
+           uint32 startIndex,                   // IN: Start of iov
+           void **buf,                          // IN/OUT: Buffer to be freed
+           size_t *bufSize,                     // IN: Size of the buffer
+           Bool *isAllocated,                   // IN: Was buffer allocated ?
+           MappingType mappingType,             // IN: Readable / Writeable ?
+           HgfsServerChannelCallbacks *chanCb)  // IN: Channel callbacks
 {
    uint32 iovCount = 0;
    int size = *bufSize;
    ASSERT(buf);
 
-   if (!transportSession->channelCbTable) {
+   if (chanCb == NULL) {
       return;
    }
 
-   if (!transportSession->channelCbTable->putVa || *buf == NULL) {
+   if (chanCb->putVa == NULL || *buf == NULL) {
       return;
    }
 
    if (*isAllocated) {
       if (mappingType == BUF_WRITEABLE) {
-         HSPUCopyBufToIovec(packet, startIndex, *buf, *bufSize, transportSession);
+         HSPUCopyBufToIovec(packet, startIndex, *buf, *bufSize, chanCb);
       }
       LOG(10, ("%s: Hgfs Freeing buffer \n", __FUNCTION__));
       free(*buf);
@@ -431,7 +431,7 @@ HSPUPutBuf(HgfsPacket *packet,        // IN/OUT: Hgfs Packet
            iovCount < packet->iovCount && size > 0;
            iovCount++) {
          ASSERT_DEVEL(packet->iov[iovCount].context);
-         transportSession->channelCbTable->putVa(&packet->iov[iovCount].context);
+         chanCb->putVa(&packet->iov[iovCount].context);
          size -= packet->iov[iovCount].len;
       }
       LOG(10, ("%s: Hgfs bufSize = %d \n", __FUNCTION__, size));
@@ -457,11 +457,11 @@ HSPUPutBuf(HgfsPacket *packet,        // IN/OUT: Hgfs Packet
  */
 
 static void
-HSPUCopyBufToIovec(HgfsPacket *packet,       // IN/OUT: Hgfs Packet
-                   uint32 startIndex,        // IN: start index into iov
-                   void *buf,                // IN: Contigous Buffer
-                   size_t bufSize,           // IN: Size of buffer
-                   HgfsTransportSessionInfo *transportSession) // IN: Session Info
+HSPUCopyBufToIovec(HgfsPacket *packet,                   // IN/OUT: Hgfs Packet
+                   uint32 startIndex,                    // IN: start index into iov
+                   void *buf,                            // IN: Contigous Buffer
+                   size_t bufSize,                       // IN: Size of buffer
+                   HgfsServerChannelCallbacks *chanCb)   // IN: Channel callbacks
 {
    uint32 iovCount;
    size_t remainingSize = bufSize;
@@ -471,12 +471,12 @@ HSPUCopyBufToIovec(HgfsPacket *packet,       // IN/OUT: Hgfs Packet
    ASSERT(packet);
    ASSERT(buf);
 
-   if (!transportSession->channelCbTable) {
+   if (chanCb == NULL) {
       return;
    }
 
-   ASSERT_DEVEL(transportSession->channelCbTable->getWriteVa);
-   if (!transportSession->channelCbTable->getWriteVa) {
+   ASSERT_DEVEL(chanCb->getWriteVa != NULL);
+   if (chanCb->getWriteVa == NULL) {
       return;
    }
 
@@ -491,14 +491,13 @@ HSPUCopyBufToIovec(HgfsPacket *packet,       // IN/OUT: Hgfs Packet
       ASSERT_DEVEL(packet->iov[iovCount].len <=
                   (PAGE_SIZE - PAGE_OFFSET(packet->iov[iovCount].pa)));
 
-      packet->iov[iovCount].va =
-         transportSession->channelCbTable->getWriteVa(packet->iov[iovCount].pa,
-                                                      packet->iov[iovCount].len,
-                                                      &packet->iov[iovCount].context);
+      packet->iov[iovCount].va = chanCb->getWriteVa(packet->iov[iovCount].pa,
+                                                    packet->iov[iovCount].len,
+                                                    &packet->iov[iovCount].context);
       ASSERT_DEVEL(packet->iov[iovCount].va);
       if (packet->iov[iovCount].va != NULL) {
          memcpy(packet->iov[iovCount].va, (char *)buf + copiedAmount, copyAmount);
-         transportSession->channelCbTable->putVa(&packet->iov[iovCount].context);
+         chanCb->putVa(&packet->iov[iovCount].context);
          remainingSize -= copyAmount;
          copiedAmount += copyAmount;
       } else {