Net-Bluetooth
view release on metacpan or search on metacpan
CODE:
RETVAL = 0;
OUTPUT:
RETVAL
void
_close(sock)
int sock
PPCODE:
close(sock);
InOutStream
_perlfh(fd)
int fd
CODE:
InOutStream fh = PerlIO_fdopen(fd, "r+");
RETVAL = fh;
OUTPUT:
CODE:
// We use a service handle with BlueZ
RETVAL = 1;
OUTPUT:
RETVAL
void
get_remote_devices(...)
PPCODE:
EXTEND(sp, 1);
char addr[19];
char name[248];
char *local_addr;
int len = 8; // 1.28 * len
int max_rsp = 255; // max devices
int flags = IREQ_CACHE_FLUSH; // flush cache of previously discovered devices
int dev_id;
bdaddr_t baddr;
STRLEN n_a;
free(ii);
PUSHs(sv_2mortal(newRV_inc((SV*) return_hash)));
close(sock);
void
sdp_search(addr, service, name)
char *addr
char *service
char *name
PPCODE:
EXTEND(sp, 1);
uuid_t svc_uuid;
bdaddr_t target;
sdp_list_t *response_list = NULL;
sdp_session_t *session = 0;
unsigned int portnum = 0;
char local_host [] = "FF:FF:FF:00:00:00";
if(strcasecmp(addr, "localhost") == 0 || strcasecmp(addr, "local") == 0)
str2ba(local_host, &target);
RETVAL = listen(fd, backlog);
OUTPUT:
RETVAL
void
_accept(fd, proto)
int fd
char *proto
PPCODE:
EXTEND(sp, 2);
socklen_t addr_len;
int res;
if(strcasecmp(proto, "RFCOMM") == 0) {
struct sockaddr_rc rcaddr;
addr_len = sizeof(rcaddr);
res = accept(fd, (struct sockaddr *)&rcaddr, &addr_len);
PUSHs(sv_2mortal(newSViv(res)));
if(res >= 0) {
unsigned int
_register_service_handle(proto, port, service_id, name, desc)
char *proto
int port
char *service_id
char *name
char *desc
PPCODE:
uint8_t rfcomm_channel = 0;
uint16_t l2cap_port = 0;
const char *service_name = name;
const char *service_dsc = desc;
const char *service_prov = name;
uuid_t root_uuid, l2cap_uuid, rfcomm_uuid, svc_uuid;
sdp_list_t *l2cap_list = 0,
*rfcomm_list = 0,
*root_list = 0,
CODE:
sdp_session_t *sdp_session;
sdp_session = (sdp_session_t *) sdp_addr;
sdp_close(sdp_session);
void
_getpeername(fd, proto)
int fd
char *proto
PPCODE:
EXTEND(sp, 2);
if(strcasecmp(proto, "RFCOMM") == 0) {
struct sockaddr_rc rcaddr;
socklen_t len = sizeof(rcaddr);
if(getpeername(fd, (struct sockaddr *) &rcaddr, &len) == 0) {
char addr[19];
ba2str(&rcaddr.rc_bdaddr, addr);
PUSHs(sv_2mortal(newSVpv(addr, 0)));
PUSHs(sv_2mortal(newSVuv(rcaddr.rc_channel)));
}
InOutStream fh = PerlIO_fdopen(fd, "r+");
RETVAL = fh;
OUTPUT:
RETVAL
void
_close(sock)
int sock
PPCODE:
closesocket(sock);
unsigned int
_use_service_handle()
CODE:
// We dont use the service handle on Windows
RETVAL = 0;
OUTPUT:
RETVAL
void
get_remote_devices()
PPCODE:
int done = 0;
int iRet;
int error;
DWORD flags = 0;
DWORD qs_len;
HANDLE hLookup;
char addr_buf[64];
WSAQUERYSET *qs;
BTH_ADDR result;
HV *return_hash = NULL;
WSALookupServiceEnd(hLookup);
}
void
sdp_search(addr, service, name)
char *addr
char *service
char *name
PPCODE:
char *addrstr = NULL;
char *uuidstr = "0";
char localAddressBuf[32];
DWORD qs_len;
WSAQUERYSET *qs;
DWORD flags;
HANDLE h;
GUID uuid;
SOCKADDR_BTH sa;
int sa_len = sizeof(sa);
void
_register_service(serverfd, proto, port, service_id, name, desc, advertise)
int serverfd
char *proto
int port
char *service_id
char *name
char *desc
int advertise
PPCODE:
WSAQUERYSET qs;
WSAESETSERVICEOP op;
SOCKADDR_BTH sa;
int sa_len = sizeof(sa);
char *service_name = NULL;
char *service_desc = NULL;
char *service_class_id_str = NULL;
CSADDR_INFO sockInfo;
GUID uuid;
}
OUTPUT:
RETVAL
void
_accept(fd, proto)
int fd
char *proto
PPCODE:
int addr_len;
int res;
char addr[19];
SOCKADDR_BTH rcaddr;
EXTEND(sp, 2);
addr_len = sizeof(rcaddr);
res = accept(fd, (LPSOCKADDR)&rcaddr, &addr_len);
if(res != INVALID_SOCKET) {
else {
PUSHs(sv_2mortal(newSViv(-1)));
}
void
_getpeername(fd, proto)
int fd
char *proto
PPCODE:
EXTEND(sp, 2);
// not implemented for Windows yet
PUSHs(sv_2mortal(newSVuv(0)));
PUSHs(sv_2mortal(newSVuv(0)));
( run in 2.099 seconds using v1.01-cache-2.11-cpan-5511b514fd6 )