static uint32_t TPM_SendLibTPMS(int sockfd, struct tpm_buffer *tb, const char *msg) { unsigned char *respbuffer = NULL; uint32_t resp_size; uint32_t respbufsize; uint32_t rc; char mymsg[1024]; (void) sockfd; snprintf(mymsg, sizeof(mymsg), "TPM_SendLibTPMS: To TPM [%s]", msg); showBuff(tb->buffer, mymsg); rc = TPMLIB_Process(&respbuffer, &resp_size, &respbufsize, tb->buffer, tb->used); if (rc != TPM_SUCCESS) return ERR_IO; if (tb->size < resp_size) return ERR_BUFFER; memcpy(tb->buffer, respbuffer, resp_size); tb->used = resp_size; free(respbuffer); snprintf(mymsg, sizeof(mymsg), "TPM_SendLibTPMS: From TPM [%s]", msg); showBuff(tb->buffer, mymsg); return 0; }
static uint32_t TPM_TransmitCharDev(int sock_fd, struct tpm_buffer *tb, const char *msg) { uint32_t nbytes = 0; ssize_t nwritten = 0; size_t nleft = 0; unsigned int offset = 0; uint32_t ret; char mymsg[1024]; snprintf(mymsg, sizeof(mymsg), "TPM_TransmitCharDev: To TPM [%s]", msg); ret = tpm_buffer_load32(tb, TPM_PARAMSIZE_OFFSET, &nbytes); if ((ret & ERR_MASK)) { return ret; } showBuff(tb->buffer, mymsg); nleft = nbytes; while (nleft > 0) { nwritten = write(sock_fd, &tb->buffer[offset], nleft); if (nwritten < 0) { /* error */ printf("TPM_TransmitCharDev: write error %d\n", (int)nwritten); return nwritten; } nleft -= nwritten; offset += nwritten; } return 0; }
static uint32_t TPM_TransmitSocket(int sock_fd, struct tpm_buffer *tb, const char *msg) { size_t nbytes = 0; ssize_t nwritten = 0; size_t nleft = 0; unsigned int offset = 0; char mymsg[1024]; snprintf(mymsg, sizeof(mymsg), "TPM_TransmitSocket: To TPM [%s]", msg); nbytes = tb->used; showBuff(tb->buffer, mymsg); nleft = nbytes; while (nleft > 0) { nwritten = write(sock_fd, &tb->buffer[offset], nleft); if (nwritten < 0) { /* error */ printf("TPM_TransmitSocket: write error %d\n", (int) nwritten); return nwritten; } nleft -= nwritten; offset += nwritten; } return 0; }
static uint32_t TPM_ReceiveCharDev(int sock_fd, struct tpm_buffer *tb) { uint32_t rc = 0; uint32_t paramSize = 0; unsigned char *buffer = tb->buffer; #ifndef USE_PARTIAL_READ /* read the whole packet */ if (rc == 0) { int nread; nread = read(sock_fd, tb->buffer, tb->size); if (nread < 0) { rc = ERR_IO; } else { tb->used = nread; } } #endif #ifdef USE_PARTIAL_READ /* read the tag and paramSize */ if (rc == 0) { rc = TPM_ReceiveBytes(sock_fd, buffer, TPM_U16_SIZE + TPM_U32_SIZE); } #endif /* extract the paramSize */ if (rc == 0) { paramSize = LOAD32(buffer, TPM_PARAMSIZE_OFFSET); if (paramSize > TPM_MAX_BUFF_SIZE) { printf("TPM_ReceiveCharDev: paramSize %u greater than %u\n", paramSize, TPM_MAX_BUFF_SIZE); rc = ERR_BAD_RESP; } } #ifdef USE_PARTIAL_READ /* read the rest of the packet */ if (rc == 0) { rc = TPM_ReceiveBytes(sock_fd, buffer + TPM_U16_SIZE + TPM_U32_SIZE, paramSize - (TPM_U16_SIZE + TPM_U32_SIZE)); } #endif /* read the TPM return code from the packet */ if (rc == 0) { showBuff(buffer, "TPM_ReceiveCharDev: From TPM"); tb->used = paramSize; tpm_buffer_load32(tb, TPM_RETURN_OFFSET, &rc); } return rc; }
static uint32_t TPM_ReceiveSocket(int sock_fd, struct tpm_buffer *tb) { uint32_t rc = 0; uint32_t paramSize = 0; uint32_t addsize = 0; unsigned char *buffer = tb->buffer; if (TPM_LowLevel_Use_VTPM()) addsize = sizeof(uint32_t); /* read the tag and paramSize */ if (rc == 0) { rc = TPM_ReceiveBytes(sock_fd, buffer, addsize + TPM_U16_SIZE + TPM_U32_SIZE); } /* extract the paramSize */ if (rc == 0) { paramSize = LOAD32(buffer, addsize + TPM_PARAMSIZE_OFFSET); if (paramSize > TPM_MAX_BUFF_SIZE) { printf ("TPM_ReceiveSocket: ERROR: paramSize %u greater than %u\n", paramSize, TPM_MAX_BUFF_SIZE); rc = ERR_BAD_RESP; } } /* read the rest of the packet */ if (rc == 0) { rc = TPM_ReceiveBytes(sock_fd, buffer + addsize + TPM_U16_SIZE + TPM_U32_SIZE, paramSize - (TPM_U16_SIZE + TPM_U32_SIZE)); } /* read the TPM return code from the packet */ if (rc == 0) { showBuff(buffer, "TPM_ReceiveSocket: From TPM"); rc = LOAD32(buffer, addsize + TPM_RETURN_OFFSET); tb->used = addsize + paramSize; } return rc; }
/** * recv data from a client * huhai */ int dataRecv(int sockfd, struct _protocol *p) { int n = 0; int i = 0; int ret = 0; int send_len = 0; char buff[100]; while ((n = read(sockfd, buff, 100)) > 0) { UCT_DEBUG("read:"); showBuff(buff,n); UCT_DEBUG("\r\n"); for( i=0; i<n; i++) { ret = netIn(buff[i]); } sleep(1); } UCT_DEBUG("end read\n"); return 0; }
static uint32_t TPM_TransmitSocket(int sock_fd, struct tpm_buffer *tb, const char *msg) { size_t nbytes = 0; ssize_t nwritten = 0; size_t nleft = 0; unsigned int offset = 0; char mymsg[1024]; snprintf(mymsg, sizeof(mymsg), "TPM_TransmitSocket: To TPM [%s]", msg); nbytes = tb->used; showBuff(tb->buffer, mymsg); nleft = nbytes; while (nleft > 0) { #ifdef TPM_POSIX nwritten = write(sock_fd, &tb->buffer[offset], nleft); if (nwritten < 0) { /* error */ printf("TPM_TransmitSocket: write error %d\n", (int)nwritten); return ERR_IO; } #endif #ifdef TPM_WINDOWS /* cast for winsock. Unix uses void * */ nwritten = send(sock_fd, (char *)(&tb->buffer[offset]), nleft,0); if (nwritten == SOCKET_ERROR) { /* error */ printf("TPM_TransmitSocket: write error %d\n", (int)nwritten); return ERR_IO; } #endif nleft -= nwritten; offset += nwritten; } return 0; }