/* recv a pdu */ static void stub_rx_pdu(struct usbip_device *ud) { int ret; struct usbip_header pdu; struct stub_device *sdev = container_of(ud, struct stub_device, ud); dbg_stub_rx("Enter\n"); memset(&pdu, 0, sizeof(pdu)); /* 1. receive a pdu header */ dbg_stub_rx("before usbip_xmit\n"); ret = usbip_xmit(0, ud->tcp_socket, (char *) &pdu, sizeof(pdu), 0); dbg_stub_rx("after usbip_xmit\n"); if (ret != sizeof(pdu)) { uerr("recv a header, %d\n", ret); usbip_event_add(ud, SDEV_EVENT_ERROR_TCP); return; } usbip_header_correct_endian(&pdu, 0); if (dbg_flag_stub_rx) usbip_dump_header(&pdu); if (!valid_request(sdev, &pdu)) { uerr("recv invalid request\n"); usbip_event_add(ud, SDEV_EVENT_ERROR_TCP); return; } #if CLIENT > 2 sdev->heartbeat_pending = 0; #endif switch (pdu.base.command) { case USBIP_CMD_UNLINK: stub_recv_cmd_unlink(sdev, &pdu); break; case USBIP_CMD_SUBMIT: stub_recv_cmd_submit(sdev, &pdu); break; #if CLIENT > 2 // added by tf, 110530 case USBIP_HEARTBEAT_REPLY: sdev->heartbeat_pending = 0; break; // end --- added #endif default: /* NOTREACHED */ uerr("unknown pdu\n"); usbip_event_add(ud, SDEV_EVENT_ERROR_TCP); return; } }
/* recv a pdu */ static void stub_rx_pdu(struct usbip_device *ud) { int ret; struct usbip_header pdu; struct stub_device *sdev = container_of(ud, struct stub_device, ud); dbg_stub_rx("Enter\n"); memset(&pdu, 0, sizeof(pdu)); /* 1. receive a pdu header */ ret = usbip_xmit(0, ud->tcp_socket, (char *) &pdu, sizeof(pdu),0); if (ret != sizeof(pdu)) { uerr("recv a header, %d\n", ret); usbip_event_add(ud, SDEV_EVENT_ERROR_TCP); return; } usbip_header_correct_endian(&pdu, 0); if (dbg_flag_stub_rx) usbip_dump_header(&pdu); if (!valid_request(sdev, &pdu)) { uerr("recv invalid request\n"); usbip_event_add(ud, SDEV_EVENT_ERROR_TCP); return; } switch (pdu.base.command) { case USBIP_CMD_UNLINK: stub_recv_cmd_unlink(sdev, &pdu); break; case USBIP_CMD_SUBMIT: stub_recv_cmd_submit(sdev, &pdu); break; default: /* NOTREACHED */ uerr("unknown pdu\n"); usbip_event_add(ud, SDEV_EVENT_ERROR_TCP); return; } }