Exemple #1
0
/*
 * Function btobex_listen (self)
 *
 *    Listen for incoming connections.
 *
 */
int btobex_listen(obex_t *self)
{
#ifndef _WIN32
	DEBUG(3, "\n");

	self->serverfd = obex_create_socket(self, AF_BLUETOOTH);
	if(self->serverfd < 0) {
		DEBUG(0, "Error creating socket\n");
		return -1;
	}
	
	if (bind(self->serverfd, (struct sockaddr*) &self->trans.self.rfcomm, 
		 sizeof(struct sockaddr_rc)))
	{
		DEBUG(0, "Error doing bind\n");
		goto out_freesock;
	}


	if (listen(self->serverfd, 1)) {
		DEBUG(0, "Error doing listen\n");
		goto out_freesock;
	}

	DEBUG(4, "We are now listening for connections\n");
	return 1;

out_freesock:
	obex_delete_socket(self, self->serverfd);
	self->serverfd = -1;
#endif /* _WIN32 */
	return -1;
}
Exemple #2
0
/*
 * Function irobex_irda_connect_request (self)
 *
 *    Open the TTP connection
 *
 */
int irobex_connect_request(obex_t *self)
{
	int mtu = 0;
	int len = sizeof(int);
	int ret;

	DEBUG(4, "\n");

	if(self->fd < 0)	{
		self->fd = obex_create_socket(self, AF_IRDA);
		if(self->fd < 0)
			return -1;
	}

	/* Check if the application did supply a valid address.
	 * You need to use OBEX_TransportConnect() for that. Jean II */
	if(irobex_no_addr(&self->trans.peer.irda)) {
		/* Nope. Go find one... */
		ret = irobex_discover_devices(self);
		if (ret < 0)	{
			DEBUG(1, "No devices in range\n");
			goto out_freesock;
		}
	}

	ret = connect(self->fd, (struct sockaddr*) &self->trans.peer.irda,
		      sizeof(struct sockaddr_irda));
	if (ret < 0) {
		DEBUG(4, "ret=%d\n", ret);
		goto out_freesock;
	}

#ifndef _WIN32
	/* Check what the IrLAP data size is */
	ret = getsockopt(self->fd, SOL_IRLMP, IRTTP_MAX_SDU_SIZE, 
			 (void *) &mtu, &len);
	if (ret < 0) {
		goto out_freesock;
	}
#else
	mtu = 512;
#endif
	self->trans.mtu = mtu;

	DEBUG(2, "transport mtu=%d\n", mtu);
	
	return 1;

out_freesock:
	obex_delete_socket(self, self->fd);
	self->fd = -1;
	return ret;	
}
Exemple #3
0
/*
 * Function irobex_listen (self)
 *
 *    Listen for incoming connections.
 *
 */
int irobex_listen(obex_t *self)
{
	DEBUG(3, "\n");

	self->serverfd = obex_create_socket(self, AF_IRDA);
	if(self->serverfd < 0) {
		DEBUG(0, "Error creating socket\n");
		return -1;
	}
	
	if (bind(self->serverfd, (struct sockaddr*) &self->trans.self.irda, 
		 sizeof(struct sockaddr_irda)))
	{
		DEBUG(0, "Error doing bind\n");
		goto out_freesock;
	}

#ifndef _WIN32
	/* Ask the IrDA stack to advertise the Obex hint bit - Jean II */
	/* Under Linux, it's a regular socket option */
	{
		unsigned char	hints[4];	/* Hint be we advertise */

		/* We want to advertise the OBEX hint bit */
		hints[0] = HINT_EXTENSION;
		hints[1] = HINT_OBEX;

		/* Tell the stack about it */
		if (setsockopt(self->serverfd, SOL_IRLMP, IRLMP_HINTS_SET,
			       hints, sizeof(hints))) {
			/* This command is not supported by older kernels,
			   so ignore any errors! */
		}
	}
#else /* _WIN32 */
	/* Ask the IrDA stack to advertise the Obex hint bit */
	/* Under Windows, it's a complicated story */
#endif /* _WIN32 */

	if (listen(self->serverfd, 1)) {
		DEBUG(0, "Error doing listen\n");
		goto out_freesock;
	}

	DEBUG(4, "We are now listening for connections\n");
	return 1;

out_freesock:
	obex_delete_socket(self, self->serverfd);
	self->serverfd = -1;
	return -1;
}
Exemple #4
0
/*
 * Function btobex_irda_connect_request (self)
 *
 *    Open the RFCOMM connection
 *
 */
int btobex_connect_request(obex_t *self)
{
	int ret;
#ifndef _WIN32
	int mtu = 0;
	//int len = sizeof(int);

	DEBUG(4, "\n");

	if(self->fd < 0)	{
		self->fd = obex_create_socket(self, AF_BLUETOOTH);
		if(self->fd < 0)
			return -1;
	}

	ret = bind(self->fd, (struct sockaddr*) &self->trans.self.rfcomm,
		   sizeof(struct sockaddr_rc));

	if (ret < 0) {
		DEBUG(4, "ret=%d\n", ret);
		goto out_freesock;
	}

	ret = connect(self->fd, (struct sockaddr*) &self->trans.peer.rfcomm,
		      sizeof(struct sockaddr_rc));
	if (ret < 0) {
		DEBUG(4, "ret=%d\n", ret);
		goto out_freesock;
	}

	mtu = OBEX_DEFAULT_MTU;
	self->trans.mtu = mtu;

	DEBUG(2, "transport mtu=%d\n", mtu);

	return 1;

out_freesock:
	obex_delete_socket(self, self->fd);
	self->fd = -1;
#endif /* _WIN32 */
	return ret;	
}