QNX and BLACKBERRY support
UDP Multicast for QNX git-svn-id: svn://db.shs.com.ru/pip@133 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -27,7 +27,9 @@
|
|||||||
char * __syslocname__ = 0;
|
char * __syslocname__ = 0;
|
||||||
char * __sysoemname__ = 0;
|
char * __sysoemname__ = 0;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef BLACKBERRY
|
||||||
|
# include <ctype.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/*! \class PIChar
|
/*! \class PIChar
|
||||||
* \brief Unicode char
|
* \brief Unicode char
|
||||||
|
|||||||
@@ -31,7 +31,11 @@
|
|||||||
# include <pwd.h>
|
# include <pwd.h>
|
||||||
# include <sys/utsname.h>
|
# include <sys/utsname.h>
|
||||||
# include <pthread.h>
|
# include <pthread.h>
|
||||||
# include <csignal>
|
# ifdef BLACKBERRY
|
||||||
|
# include <signal.h>
|
||||||
|
# else
|
||||||
|
# include <csignal>
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#ifdef MAC_OS
|
#ifdef MAC_OS
|
||||||
# include <mach/mach_traps.h>
|
# include <mach/mach_traps.h>
|
||||||
|
|||||||
@@ -25,6 +25,9 @@
|
|||||||
|
|
||||||
#include <ctime>
|
#include <ctime>
|
||||||
#include "pistring.h"
|
#include "pistring.h"
|
||||||
|
#ifdef QNX
|
||||||
|
# include <time.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef DOXYGEN
|
#ifdef DOXYGEN
|
||||||
//! \brief Sleep for "msecs" milliseconds
|
//! \brief Sleep for "msecs" milliseconds
|
||||||
|
|||||||
@@ -267,7 +267,7 @@ PIVector<PIFile::FileInfo> PIDir::entries() {
|
|||||||
const_cast<char*>(p.data()), 0
|
const_cast<char*>(p.data()), 0
|
||||||
# endif
|
# endif
|
||||||
, 0,
|
, 0,
|
||||||
# if defined(MAC_OS) || defined(ANDROID)
|
# if defined(MAC_OS) || defined(ANDROID) || defined(BLACKBERRY)
|
||||||
alphasort);
|
alphasort);
|
||||||
# else
|
# else
|
||||||
versionsort);
|
versionsort);
|
||||||
|
|||||||
@@ -23,7 +23,11 @@
|
|||||||
#ifdef QNX
|
#ifdef QNX
|
||||||
# include <net/if_dl.h>
|
# include <net/if_dl.h>
|
||||||
# include <hw/nicinfo.h>
|
# include <hw/nicinfo.h>
|
||||||
# include <sys/dcmd_io-net.h>
|
# ifdef BLACKBERRY
|
||||||
|
# include <netinet/in.h>
|
||||||
|
# else
|
||||||
|
# include <sys/dcmd_io-net.h>
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
# include <io.h>
|
# include <io.h>
|
||||||
@@ -333,11 +337,15 @@ bool PIEthernet::joinMulticastGroup(const PIString & group) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
PIFlags<Parameters> params = parameters();
|
PIFlags<Parameters> params = parameters();
|
||||||
#ifndef QNX
|
//#ifndef QNX
|
||||||
if (!params[Broadcast])
|
if (!params[Broadcast])
|
||||||
;//piCoutObj << "Warning: \"Broadcast\" parameter not set, \"joinMulticastGroup(\"" << group << "\")\" may be useless!";
|
;//piCoutObj << "Warning: \"Broadcast\" parameter not set, \"joinMulticastGroup(\"" << group << "\")\" may be useless!";
|
||||||
parseAddress(path(), &ip_, &port_);
|
parseAddress(path(), &ip_, &port_);
|
||||||
|
#ifndef QNX
|
||||||
struct ip_mreqn mreq;
|
struct ip_mreqn mreq;
|
||||||
|
#else
|
||||||
|
struct ip_mreq mreq;
|
||||||
|
#endif
|
||||||
memset(&mreq, 0, sizeof(mreq));
|
memset(&mreq, 0, sizeof(mreq));
|
||||||
#ifdef LINUX
|
#ifdef LINUX
|
||||||
//mreq.imr_address.s_addr = INADDR_ANY;
|
//mreq.imr_address.s_addr = INADDR_ANY;
|
||||||
@@ -345,8 +353,13 @@ bool PIEthernet::joinMulticastGroup(const PIString & group) {
|
|||||||
const PIEthernet::Interface * ci = il.getByAddress(ip_);
|
const PIEthernet::Interface * ci = il.getByAddress(ip_);
|
||||||
if (ci != 0) mreq.imr_ifindex = ci->index;*/
|
if (ci != 0) mreq.imr_ifindex = ci->index;*/
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef QNX
|
||||||
if (params[PIEthernet::Broadcast]) mreq.imr_address.s_addr = INADDR_ANY;
|
if (params[PIEthernet::Broadcast]) mreq.imr_address.s_addr = INADDR_ANY;
|
||||||
else mreq.imr_address.s_addr = inet_addr(ip_.dataAscii());
|
else mreq.imr_address.s_addr = inet_addr(ip_.dataAscii());
|
||||||
|
#else
|
||||||
|
if (params[PIEthernet::Broadcast]) mreq.imr_interface.s_addr = INADDR_ANY;
|
||||||
|
else mreq.imr_interface.s_addr = inet_addr(ip_.dataAscii());
|
||||||
|
#endif
|
||||||
/*#ifndef WINDOWS
|
/*#ifndef WINDOWS
|
||||||
PIEthernet::InterfaceList il = interfaces();
|
PIEthernet::InterfaceList il = interfaces();
|
||||||
const PIEthernet::Interface * ci = il.getByAddress(ip_);
|
const PIEthernet::Interface * ci = il.getByAddress(ip_);
|
||||||
@@ -361,7 +374,20 @@ bool PIEthernet::joinMulticastGroup(const PIString & group) {
|
|||||||
if (params[PIEthernet::MulticastLoop]) ethSetsockoptInt(sock, IPPROTO_IP, IP_MULTICAST_LOOP);
|
if (params[PIEthernet::MulticastLoop]) ethSetsockoptInt(sock, IPPROTO_IP, IP_MULTICAST_LOOP);
|
||||||
applyOptInt(IPPROTO_IP, IP_MULTICAST_TTL, multicastTTL());
|
applyOptInt(IPPROTO_IP, IP_MULTICAST_TTL, multicastTTL());
|
||||||
if (!mcast_groups.contains(group)) mcast_groups << group;
|
if (!mcast_groups.contains(group)) mcast_groups << group;
|
||||||
#endif
|
//#else
|
||||||
|
// parseAddress(path(), &ip_, &port_);
|
||||||
|
// struct ip_mreq mreq;
|
||||||
|
// memset(&mreq, 0, sizeof(mreq));
|
||||||
|
// mreq.imr_interface.s_addr = inet_addr(ip_.dataAscii());
|
||||||
|
// mreq.imr_multiaddr.s_addr = inet_addr(group.dataAscii());
|
||||||
|
// if (ethSetsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) != 0) {
|
||||||
|
// piCoutObj << "Can`t join multicast group " << group << ", " << ethErrorString();
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
// if (params[PIEthernet::MulticastLoop]) ethSetsockoptInt(sock, IPPROTO_IP, IP_MULTICAST_LOOP);
|
||||||
|
// applyOptInt(IPPROTO_IP, IP_MULTICAST_TTL, multicastTTL());
|
||||||
|
// if (!mcast_groups.contains(group)) mcast_groups << group;
|
||||||
|
//#endif
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -374,20 +400,27 @@ bool PIEthernet::leaveMulticastGroup(const PIString & group) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
PIFlags<Parameters> params = parameters();
|
PIFlags<Parameters> params = parameters();
|
||||||
#ifndef QNX
|
|
||||||
/// TODO windows
|
/// TODO windows
|
||||||
parseAddress(path(), &ip_, &port_);
|
parseAddress(path(), &ip_, &port_);
|
||||||
|
#ifndef QNX
|
||||||
struct ip_mreqn mreq;
|
struct ip_mreqn mreq;
|
||||||
|
#else
|
||||||
|
struct ip_mreq mreq;
|
||||||
|
#endif
|
||||||
memset(&mreq, 0, sizeof(mreq));
|
memset(&mreq, 0, sizeof(mreq));
|
||||||
|
#ifndef QNX
|
||||||
if (params[PIEthernet::Broadcast]) mreq.imr_address.s_addr = INADDR_ANY;
|
if (params[PIEthernet::Broadcast]) mreq.imr_address.s_addr = INADDR_ANY;
|
||||||
else mreq.imr_address.s_addr = inet_addr(ip_.dataAscii());
|
else mreq.imr_address.s_addr = inet_addr(ip_.dataAscii());
|
||||||
|
#else
|
||||||
|
if (params[PIEthernet::Broadcast]) mreq.imr_interface.s_addr = INADDR_ANY;
|
||||||
|
else mreq.imr_interface.s_addr = inet_addr(ip_.dataAscii());
|
||||||
|
#endif
|
||||||
mreq.imr_multiaddr.s_addr = inet_addr(group.dataAscii());
|
mreq.imr_multiaddr.s_addr = inet_addr(group.dataAscii());
|
||||||
if (ethSetsockopt(sock, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq)) == -1) {
|
if (ethSetsockopt(sock, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq)) == -1) {
|
||||||
piCoutObj << "Can`t leave multicast group " << group << ", " << ethErrorString();
|
piCoutObj << "Can`t leave multicast group " << group << ", " << ethErrorString();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
mcast_groups.removeAll(group);
|
mcast_groups.removeAll(group);
|
||||||
#endif
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -436,7 +469,7 @@ bool PIEthernet::listen(bool threaded) {
|
|||||||
PRIVATE->addr_.sin_addr.s_addr = inet_addr(ip_.dataAscii());
|
PRIVATE->addr_.sin_addr.s_addr = inet_addr(ip_.dataAscii());
|
||||||
PRIVATE->addr_.sin_family = AF_INET;
|
PRIVATE->addr_.sin_family = AF_INET;
|
||||||
#ifdef QNX
|
#ifdef QNX
|
||||||
PRIVATE->addr_.sin_len = sizeof(*addr_);
|
PRIVATE->addr_.sin_len = sizeof(PRIVATE->addr_);
|
||||||
#endif
|
#endif
|
||||||
opened_ = false;
|
opened_ = false;
|
||||||
int tries = 0;
|
int tries = 0;
|
||||||
@@ -577,7 +610,7 @@ int PIEthernet::write(const void * data, int max_size) {
|
|||||||
PRIVATE->addr_.sin_addr.s_addr = inet_addr(ip_s.dataAscii());
|
PRIVATE->addr_.sin_addr.s_addr = inet_addr(ip_s.dataAscii());
|
||||||
PRIVATE->addr_.sin_family = AF_INET;
|
PRIVATE->addr_.sin_family = AF_INET;
|
||||||
#ifdef QNX
|
#ifdef QNX
|
||||||
PRIVATE->addr_.sin_len = sizeof(*addr_);
|
PRIVATE->addr_.sin_len = sizeof(PRIVATE->addr_);
|
||||||
#endif
|
#endif
|
||||||
//piCoutObj << "connect SingleTCP" << ip_s << ":" << port_s << "...";
|
//piCoutObj << "connect SingleTCP" << ip_s << ":" << port_s << "...";
|
||||||
if (::connect(sock, (sockaddr * )&PRIVATE->addr_, sizeof(PRIVATE->addr_)) != 0) {
|
if (::connect(sock, (sockaddr * )&PRIVATE->addr_, sizeof(PRIVATE->addr_)) != 0) {
|
||||||
@@ -607,7 +640,7 @@ int PIEthernet::write(const void * data, int max_size) {
|
|||||||
PRIVATE->addr_.sin_addr.s_addr = inet_addr(ip_.dataAscii());
|
PRIVATE->addr_.sin_addr.s_addr = inet_addr(ip_.dataAscii());
|
||||||
PRIVATE->addr_.sin_family = AF_INET;
|
PRIVATE->addr_.sin_family = AF_INET;
|
||||||
#ifdef QNX
|
#ifdef QNX
|
||||||
PRIVATE->addr_.sin_len = sizeof(*addr_);
|
PRIVATE->addr_.sin_len = sizeof(PRIVATE->addr_);
|
||||||
#endif
|
#endif
|
||||||
//piCoutObj << "connect to " << ip << ":" << port_;
|
//piCoutObj << "connect to " << ip << ":" << port_;
|
||||||
connected_ = (::connect(sock, (sockaddr * )&PRIVATE->addr_, sizeof(PRIVATE->addr_)) == 0);
|
connected_ = (::connect(sock, (sockaddr * )&PRIVATE->addr_, sizeof(PRIVATE->addr_)) == 0);
|
||||||
@@ -872,6 +905,7 @@ PIEthernet::InterfaceList PIEthernet::interfaces() {
|
|||||||
ci.netmask = getSockAddr(ret->ifa_netmask);
|
ci.netmask = getSockAddr(ret->ifa_netmask);
|
||||||
ci.mac.clear();
|
ci.mac.clear();
|
||||||
# ifdef QNX
|
# ifdef QNX
|
||||||
|
# ifndef BLACKBERRY
|
||||||
int fd = ::open((PIString("/dev/io-net/") + ci.name).dataAscii(), O_RDONLY);
|
int fd = ::open((PIString("/dev/io-net/") + ci.name).dataAscii(), O_RDONLY);
|
||||||
if (fd != 0) {
|
if (fd != 0) {
|
||||||
nic_config_t nic;
|
nic_config_t nic;
|
||||||
@@ -879,6 +913,7 @@ PIEthernet::InterfaceList PIEthernet::interfaces() {
|
|||||||
::close(fd);
|
::close(fd);
|
||||||
ci.mac = macFromBytes(PIByteArray(nic.permanent_address, 6));
|
ci.mac = macFromBytes(PIByteArray(nic.permanent_address, 6));
|
||||||
}
|
}
|
||||||
|
# endif
|
||||||
# else
|
# else
|
||||||
# ifdef MAC_OS
|
# ifdef MAC_OS
|
||||||
PIString req = PISystemInfo::instance()->ifconfigPath + " " + ci.name + " | grep ether";
|
PIString req = PISystemInfo::instance()->ifconfigPath + " " + ci.name + " | grep ether";
|
||||||
|
|||||||
@@ -452,15 +452,20 @@ PIFile::FileInfo PIFile::fileInfo(const PIString & path) {
|
|||||||
ret.time_access = PIDateTime::fromSystemTime(PISystemTime(fs.st_atime, fs.st_atime_nsec));
|
ret.time_access = PIDateTime::fromSystemTime(PISystemTime(fs.st_atime, fs.st_atime_nsec));
|
||||||
ret.time_modification = PIDateTime::fromSystemTime(PISystemTime(fs.st_mtime, fs.st_mtime_nsec));
|
ret.time_modification = PIDateTime::fromSystemTime(PISystemTime(fs.st_mtime, fs.st_mtime_nsec));
|
||||||
#else
|
#else
|
||||||
# ifdef MAC_OS
|
# ifdef QNX
|
||||||
# define ATIME st_atimespec
|
ret.time_access = PIDateTime::fromSecondSinceEpoch(fs.st_atime);
|
||||||
# define MTIME st_ctimespec
|
ret.time_modification = PIDateTime::fromSecondSinceEpoch(fs.st_mtime);
|
||||||
# else
|
# else
|
||||||
# define ATIME st_atim
|
# ifdef MAC_OS
|
||||||
# define MTIME st_mtim
|
# define ATIME st_atimespec
|
||||||
# endif
|
# define MTIME st_ctimespec
|
||||||
|
# else
|
||||||
|
# define ATIME st_atim
|
||||||
|
# define MTIME st_mtim
|
||||||
|
# endif
|
||||||
ret.time_access = PIDateTime::fromSystemTime(PISystemTime(fs.ATIME.tv_sec, fs.ATIME.tv_nsec));
|
ret.time_access = PIDateTime::fromSystemTime(PISystemTime(fs.ATIME.tv_sec, fs.ATIME.tv_nsec));
|
||||||
ret.time_modification = PIDateTime::fromSystemTime(PISystemTime(fs.MTIME.tv_sec, fs.MTIME.tv_nsec));
|
ret.time_modification = PIDateTime::fromSystemTime(PISystemTime(fs.MTIME.tv_sec, fs.MTIME.tv_nsec));
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
ret.perm_user = FileInfo::Permissions((mode & S_IRUSR) == S_IRUSR, (mode & S_IWUSR) == S_IWUSR, (mode & S_IXUSR) == S_IXUSR);
|
ret.perm_user = FileInfo::Permissions((mode & S_IRUSR) == S_IRUSR, (mode & S_IWUSR) == S_IWUSR, (mode & S_IXUSR) == S_IXUSR);
|
||||||
ret.perm_group = FileInfo::Permissions((mode & S_IRGRP) == S_IRGRP, (mode & S_IWGRP) == S_IWGRP, (mode & S_IXGRP) == S_IXGRP);
|
ret.perm_group = FileInfo::Permissions((mode & S_IRGRP) == S_IRGRP, (mode & S_IWGRP) == S_IWGRP, (mode & S_IXGRP) == S_IXGRP);
|
||||||
|
|||||||
@@ -136,15 +136,18 @@ PIByteArray PICrypt::decrypt(const PIByteArray & crypt_data, PIByteArray key, bo
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
PIByteArray PICrypt::hash(const PIString & secret) {
|
PIByteArray PICrypt::hash(const PIString & secret) {
|
||||||
PIByteArray hash;
|
PIByteArray hash;
|
||||||
|
qDebug() << "hash start";
|
||||||
#ifdef PIP_CRYPT
|
#ifdef PIP_CRYPT
|
||||||
sodium_init();
|
sodium_init();
|
||||||
|
qDebug() << "sodium_init ok";
|
||||||
hash.resize(crypto_generichash_BYTES);
|
hash.resize(crypto_generichash_BYTES);
|
||||||
PIByteArray s(secret.data(), secret.size());
|
PIByteArray s(secret.data(), secret.size());
|
||||||
crypto_generichash(hash.data(), hash.size(), s.data(), s.size(), (const uchar*)hash_def_key, sizeof(hash_def_key) - 1);
|
crypto_generichash(hash.data(), hash.size(), s.data(), s.size(), (const uchar*)hash_def_key, sizeof(hash_def_key) - 1);
|
||||||
#endif
|
#endif
|
||||||
|
qDebug() << "hash end";
|
||||||
return hash;
|
return hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,8 +32,12 @@
|
|||||||
# undef PIP_MATH_Y0
|
# undef PIP_MATH_Y0
|
||||||
# undef PIP_MATH_Y1
|
# undef PIP_MATH_Y1
|
||||||
# undef PIP_MATH_YN
|
# undef PIP_MATH_YN
|
||||||
# include <complex.h>
|
|
||||||
# include <math.h>
|
# include <math.h>
|
||||||
|
# ifdef BLACKBERRY
|
||||||
|
# include <complex>
|
||||||
|
# else
|
||||||
|
# include <complex.h>
|
||||||
|
# endif
|
||||||
#else
|
#else
|
||||||
# include <complex>
|
# include <complex>
|
||||||
# include <cmath>
|
# include <cmath>
|
||||||
|
|||||||
@@ -30,6 +30,9 @@
|
|||||||
#endif
|
#endif
|
||||||
#if defined(__QNX__) || defined(__QNXNTO__)
|
#if defined(__QNX__) || defined(__QNXNTO__)
|
||||||
# define QNX
|
# define QNX
|
||||||
|
# ifdef Q_OS_BLACKBERRY
|
||||||
|
# define BLACKBERRY
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#ifdef __FreeBSD__
|
#ifdef __FreeBSD__
|
||||||
# define FREE_BSD
|
# define FREE_BSD
|
||||||
|
|||||||
@@ -18,7 +18,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pisignals.h"
|
#include "pisignals.h"
|
||||||
#include <csignal>
|
#ifdef BLACKBERRY
|
||||||
|
# include <signal.h>
|
||||||
|
#else
|
||||||
|
# include <csignal>
|
||||||
|
#endif
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
# define SIGUSR1 10
|
# define SIGUSR1 10
|
||||||
# define SIGUSR2 12
|
# define SIGUSR2 12
|
||||||
|
|||||||
@@ -24,6 +24,9 @@
|
|||||||
#define PIMUTEX_H
|
#define PIMUTEX_H
|
||||||
|
|
||||||
#include "piinit.h"
|
#include "piinit.h"
|
||||||
|
#ifdef BLACKBERRY
|
||||||
|
# include <pthread.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
class PIP_EXPORT PIMutex
|
class PIP_EXPORT PIMutex
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -28,6 +28,9 @@
|
|||||||
#include "piinit.h"
|
#include "piinit.h"
|
||||||
#include "pimutex.h"
|
#include "pimutex.h"
|
||||||
#include "piobject.h"
|
#include "piobject.h"
|
||||||
|
#ifdef BLACKBERRY
|
||||||
|
# include <pthread.h>
|
||||||
|
#endif
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
# define __THREAD_FUNC__ uint __stdcall
|
# define __THREAD_FUNC__ uint __stdcall
|
||||||
#else
|
#else
|
||||||
|
|||||||
Reference in New Issue
Block a user