예제 #1
0
파일: usbnet.c 프로젝트: pettair/libusbnet
/* libusb(5):
 * Interrupt transfers.
 */
int usb_interrupt_write(usb_dev_handle *dev, int ep, usb_buf_t bytes, int size, int timeout)
{
   // Get remote fd
   Packet* pkt = pkt_claim();
   int fd = session_get();

   // Prepare packet
   pkt_init(pkt, UsbInterruptWrite);
   pkt_addint(pkt, dev->fd);
   pkt_addint(pkt, ep);
   pkt_addstr(pkt, size, bytes);
   pkt_addint(pkt, timeout);
   pkt_send(pkt, fd);

   // Get response
   int res = -1;
   if(pkt_recv(fd, pkt) > 0 && pkt_op(pkt) == UsbInterruptWrite) {
      Iterator it;
      pkt_begin(pkt, &it);
      res = iter_getint(&it);
   }

   // Return response
   pkt_release();
   debug_msg("returned %d", res);
   return res;
}
예제 #2
0
파일: usbnet.c 프로젝트: pettair/libusbnet
int usb_control_msg(usb_dev_handle *dev, int requesttype, int request,
        int value, int index, char *bytes, int size, int timeout)
{
   // Get remote fd
   Packet* pkt = pkt_claim();
   int fd = session_get();

   // Prepare packet
   pkt_init(pkt, UsbControlMsg);
   pkt_addint(pkt, dev->fd);
   pkt_addint(pkt, requesttype);
   pkt_addint(pkt, request);
   pkt_addint(pkt, value);
   pkt_addint(pkt, index);
   pkt_addstr(pkt, size, bytes);
   pkt_addint(pkt, timeout);
   pkt_send(pkt, fd);

   // Get response
   int res = -1;
   if(pkt_recv(fd, pkt) > 0 && pkt_op(pkt) == UsbControlMsg) {
      Iterator it;
      pkt_begin(pkt, &it);
      res = iter_getint(&it);

      if(res > 0) {
         int minlen = (res > size) ? size : res;
         memcpy(bytes, it.val, minlen);
      }

   }

   // Return response
   pkt_release();
   debug_msg("returned %d", res);
   return res;
}
예제 #3
0
파일: socket.c 프로젝트: graue/bsfirc
/* PROTO */
IRCLIB_RET
irclib_connect(void *handle, char *server, uint16_t port)
{
	IRCLIB         *hptr = (IRCLIB *) handle;
	pkt_t          *connectpkt;
	pkt_t          *nickpkt;
#ifdef MACINTOSH_CLASSIC

#else
	struct sockaddr_in sin;
	struct hostent *he;

	if ((he = gethostbyname(server)) == NULL) {
		perror("gethostbyname()");
		return IRCLIB_RET_ERROR;
	}
	if ((hptr->sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
		perror("socket()");
		return IRCLIB_RET_ERROR;
	}
	sin.sin_family = AF_INET;
	sin.sin_port = htons(port);
	sin.sin_addr = *((struct in_addr *) he->h_addr);
	memset(&(sin.sin_zero), 0, 8);

	if (connect(hptr->sock, (struct sockaddr *) & sin, sizeof(struct sockaddr)) == -1) {
		perror("connect()");
		return IRCLIB_RET_ERROR;
	}
#endif

	/* The hostname and servername sent here are typically unused.
	 * However, if we send "x", some servers detect us as a spambot
	 * and refuse the connection, so we reuse the username instead.
	 */
	connectpkt = pkt_init(5 + strlen(hptr->username) + 1 +
			      strlen(hptr->username) + 1 +
			      strlen(hptr->username) + 1 +
			      strlen(hptr->realname) + 3);

	pkt_addstr(connectpkt, "USER ");
	pkt_addstr(connectpkt, hptr->username);
	pkt_addstr(connectpkt, " ");
	pkt_addstr(connectpkt, hptr->username); /* hostname */
	pkt_addstr(connectpkt, " ");
	pkt_addstr(connectpkt, hptr->username); /* servername */
	pkt_addstr(connectpkt, " :");
	pkt_addstr(connectpkt, hptr->realname);
	pkt_addstr(connectpkt, "\r\n");

	sendPkt(handle, connectpkt);

	pkt_free(connectpkt);

	nickpkt = pkt_init(7 + strlen(hptr->nickname));
	pkt_addstr(nickpkt, "NICK ");
	pkt_addstr(nickpkt, hptr->nickname);
	pkt_addstr(nickpkt, "\r\n");

	sendPkt(handle, nickpkt);
	pkt_free(nickpkt);

	hptr->connected = 1;
	return IRCLIB_RET_OK;
}