Esempio n. 1
0
int CTCPSocket::Recv(char *buff, int buffsize, int isec, int iusec)
{
	if ( buff == NULL || buffsize < 1 || isec < 0 || iusec < 0 )
	{
		return K_E_SIGNATURE_ERROR;
	}
	
	struct timeval timeout;

	timeout.tv_sec = isec;
	timeout.tv_usec = iusec;

	fd_set	fds;
	FD_ZERO(&fds);
	FD_SET(m_s, &fds);

	int Ret = select( m_s + 1, &fds, NULL, NULL, &timeout);
#ifdef DEBUG
	cerr << "AGENT Recv select : " << Ret << " socket : " << m_s << endl;
#endif
	if ( Ret <= 0 ) // || FD_ISSET(m_s + 1, &fds) == 0 )
	{
		return K_E_SELECT_TIMEOUT;
	}

	int iRet = recv(m_s, buff, buffsize, 0);

#ifdef DEBUG	
	cerr << "AGENT Recv iRet : " << iRet << " socket : " << m_s << endl;
	if ( iRet > 0 )
		DUMP_MEM((unsigned char*)buff, iRet);
#endif
	return iRet;
}
Esempio n. 2
0
static void smbsim_serial_dev_read_handler(SMBSIM_SERIAL_PORT * port,
					   const void *buf, size_t len)
{
	SMBSIM_SERIAL_DEV *dev = container_of(port, SMBSIM_SERIAL_DEV, port);

	DUMP_MEM(buf, len);
	if (len == 0)
		tty_insert_flip_char(&dev->tty_port, 0, TTY_NORMAL);
	else
		tty_insert_flip_string(&dev->tty_port, buf, len);
	tty_flip_buffer_push(&dev->tty_port);
}
Esempio n. 3
0
void link_send_pkt(LINK_DATA * link, CLIENT_DATA * src, const char *buf,
		   int len)
{
	PKT_INFO info;

	TRACE_MSG(TRACE_LEVEL_INFO, TRACE_FLAG_DEFAULT, "Forward %d bytes\n",
		  len);
	DUMP_MEM(buf, len);

	info.src = src;
	info.buf = buf;
	info.len = len;
	xpcf_list_proc(&link->clients, send_pkt_to_client, &info);
}
Esempio n. 4
0
XPCF_CB(void)PortReceive(void *ctx, CSF_PKT * pkt)
{
	BASE_FILE *File = (BASE_FILE *) ctx;
	CSFBR_FILE_DATA *FileData =
	    (CSFBR_FILE_DATA *) BaseFileGetPrivate(File);

	TRACE_MSG(TRACE_LEVEL_INFO, TRACE_FLAG_DEFAULT, "%u bytes received\n",
		  csf_pkt_get_len(pkt));
	DUMP_MEM(csf_pkt_get_buf(pkt), csf_pkt_get_len(pkt));

	csf_pktq_insert(FileData->rxq, pkt);

	NotifyReceivedPacket(File);
}
Esempio n. 5
0
static int smbsim_serial_write(struct tty_struct *tty, const unsigned char *buf,
			       int count)
{
	SMBSIM_SERIAL_DEV *dev = smbsim_serial_devs + tty->index;
	int ret;

	TRACE_MSG(TRACE_LEVEL_INFO, TRACE_FLAG_DEFAULT, "0x%p - count=%d\n",
		  dev, count);
	DUMP_MEM(buf, count);

	if (count == 0) {
		TRACE_MSG(TRACE_LEVEL_ERROR, TRACE_FLAG_DEFAULT,
			  "Invalid count=%u\n", count);
		return 0;
	}

	if (dev->write_size == 0) {
		if (buf[0] > WRITE_BUF_SZ) {
			TRACE_MSG(TRACE_LEVEL_ERROR, TRACE_FLAG_DEFAULT,
				  "Invalid size=%u\n", buf[0]);
			return -EINVAL;
		}
		dev->write_size = buf[0];
		dev->cur_size = count - 1;
		if (dev->cur_size)
			memcpy(dev->write_data, buf + 1, dev->cur_size);
	} else {
		memcpy(dev->write_data + dev->cur_size, buf, count);
		dev->cur_size += count;
	}

	if (dev->cur_size < dev->write_size) {
		TRACE_MSG(TRACE_LEVEL_WARN, TRACE_FLAG_DEFAULT,
			  "Need more data (cur=%u, total=%u)\n", dev->cur_size,
			  dev->write_size);
		return count;
	}

	TRACE_MSG(TRACE_LEVEL_INFO, TRACE_FLAG_DEFAULT, "Write %u bytes\n",
		  dev->write_size);
	ret = smbsim_serial_port_write(&dev->port, dev->write_data,
				       dev->write_size);
	dev->write_size = 0;
	if (ret)
		return ret;
	return count;
}
Esempio n. 6
0
int CTCPSocket::Send(char *buff, int buffsize)
{
	if ( buff == NULL || buffsize < 1 )
	{
		return K_E_SIGNATURE_ERROR;
	}
	
	int iRet = send(m_s, buff, buffsize, 0); 


#ifdef DEBUG
	cerr << "AGENT Send Request Size : " << buffsize << endl;
	cerr << "AGENT Send iRet : " << iRet << " socket : " << m_s << endl;

	if ( iRet > 0 )
		DUMP_MEM((unsigned char*)buff, iRet);
#endif
	return iRet;
}
Esempio n. 7
0
void DumpBufferList(__in BASE_FILE * File)
{
	BASE_DEVICE *Device = BaseFileGetDevice(File);
	DEVICE_DATA *DeviceData = (DEVICE_DATA *) BaseDeviceGetPrivate(Device);
	KIRQL OldIrql;
	PLIST_ENTRY ListHead, ListEntry;
	BUFFER_DATA *BufferData;

	KeAcquireSpinLock(&DeviceData->BufferListLock, &OldIrql);
	ListHead = &DeviceData->BufferList;
	for (ListEntry = ListHead->Flink; ListEntry != ListHead;
	     ListEntry = ListEntry->Flink) {
		BufferData = CONTAINING_RECORD(ListEntry, BUFFER_DATA,
					       ListEntry);
		TRACE_MSG(TRACE_LEVEL_INFO, TRACE_FLAG_DEFAULT,
			  "Buffer 0x%p, Length %u\n", BufferData,
			  BufferData->Length);
		DUMP_MEM(BufferData->Data, BufferData->Length);
	}
	KeReleaseSpinLock(&DeviceData->BufferListLock, OldIrql);
}
Esempio n. 8
0
HRESULT
    CUSBSimEndpoint::OnDeviceRequest (USBSETUPREQUEST * pSetupRequest,
                                      ULONG * RequestHandle,
                                      BYTE * pbRequestData,
                                      ULONG cbRequestData,
                                      BYTE ** ppbResponseData,
                                      ULONG * pcbResponseData,
                                      BYTE * pbSetupStatus)
{
    PBYTE pBuf = pbRequestData;
    USHORT BytesTransferred;
    BOOL bRead =
        (pSetupRequest->bmRequestType.Bits.Direction == DIR_DEVICE_TO_HOST);
    USBSIM_XACT_STS sts;
    HRESULT hr = S_OK;

    UNREFERENCED_PARAMETER (RequestHandle);
    UNREFERENCED_PARAMETER (cbRequestData);

    TRACE_MSG (TRACE_LEVEL_INFO, TRACE_FLAG_DEFAULT,
               "Setup - %02X %02X %04X %04X %04X\n",
               pSetupRequest->bmRequestType.Byte, pSetupRequest->bRequest,
               pSetupRequest->sSetupValue, pSetupRequest->sSetupIndex,
               pSetupRequest->sSetupLength);

    // Return error for set address request so that it will be handled by DSF
    if (pSetupRequest->bmRequestType.Byte == 0
        && pSetupRequest->bRequest == SET_ADDRESS) {
        return E_NOTIMPL;
    }

    if (bRead && pSetupRequest->sSetupLength > 0) {
        pBuf = (PBYTE) CoTaskMemAlloc (pSetupRequest->sSetupLength);
        if (pBuf == NULL) {
            return E_OUTOFMEMORY;
        }
    }

    sts = usbsim_pipe_request (m_Pipe, pSetupRequest->bmRequestType.Byte,
                               pSetupRequest->bRequest,
                               pSetupRequest->sSetupValue,
                               pSetupRequest->sSetupIndex,
                               pSetupRequest->sSetupLength, pBuf, 0,
                               &BytesTransferred);
    if (sts != USBSIM_XACT_STS_OK) {
        if (bRead && pBuf) {
            CoTaskMemFree (pBuf);
        }
        switch (sts) {
        case USBSIM_XACT_STS_NAK:
            TRACE_MSG (TRACE_LEVEL_ERROR, TRACE_FLAG_DEFAULT,
                       "NAK received\n");
            *pbSetupStatus = USB_NAK;
            break;
        case USBSIM_XACT_STS_STALL:
            TRACE_MSG (TRACE_LEVEL_ERROR, TRACE_FLAG_DEFAULT,
                       "STALL received\n");
            *pbSetupStatus = USB_STALL;
            break;
        default:
            TRACE_MSG (TRACE_LEVEL_ERROR, TRACE_FLAG_DEFAULT,
                       "Unexpected transaction status=0x%X\n", sts);
            hr = E_FAIL;
        }
        return hr;
    }
    //
    // Return error for set configuration request so that it will be handled by DSF
    // Note that the request is passed to DSF after device simulator processes it.
    //
    if (pSetupRequest->bmRequestType.Byte == 0
        && pSetupRequest->bRequest == SET_CONFIGURATION) {
        return E_NOTIMPL;
    }

    if (bRead && pBuf && BytesTransferred) {
        TRACE_MSG (TRACE_LEVEL_INFO, TRACE_FLAG_DEFAULT, "Read %u bytes\n",
                   BytesTransferred);
        DUMP_MEM (pBuf, BytesTransferred);
        *ppbResponseData = pBuf;
        *pcbResponseData = BytesTransferred;
    }
    *pbSetupStatus = USB_ACK;
    return S_OK;
}