version 0.5.0_alpha

git-svn-id: svn://db.shs.com.ru/pip@8 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
2015-03-10 10:13:18 +00:00
parent b1f651ab62
commit c11bc3b3b8
697 changed files with 18150 additions and 18839 deletions

View File

@@ -4,7 +4,7 @@
/*
PIP - Platform Independent Primitives
Ethernet, UDP/TCP Broadcast/Multicast
Copyright (C) 2014 Ivan Pelipenko peri4ko@gmail.com
Copyright (C) 2015 Ivan Pelipenko peri4ko@gmail.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -25,7 +25,8 @@
#include "pitimer.h"
#include "piiodevice.h"
#include "piprocess.h"
class sockaddr;
class PIP_EXPORT PIEthernet: public PIIODevice
{
@@ -34,7 +35,7 @@ class PIP_EXPORT PIEthernet: public PIIODevice
public:
//! Contructs UDP %PIEthernet with empty read address
PIEthernet();
explicit PIEthernet();
//! \brief Type of %PIEthernet
enum PIP_EXPORT Type {
@@ -54,7 +55,7 @@ public:
};
//! Contructs %PIEthernet with type "type", read address "ip_port" and parameters "params"
PIEthernet(Type type, const PIString & ip_port = PIString(), const PIFlags<Parameters> params = 0);
explicit PIEthernet(Type type, const PIString & ip_port = PIString(), const PIFlags<Parameters> params = 0);
virtual ~PIEthernet();
@@ -324,10 +325,10 @@ public:
static PIStringList allAddresses();
static void parseAddress(const PIString & ipp, PIString * ip, int * port);
static PIString macFromBytes(const PIByteArray & mac) {PIString r; for (int i = 0; i < mac.size_s(); ++i) {r += PIString::fromNumber(mac[i], 16).expandLeftTo(2, '0'); if (i < mac.size_s() - 1) r += ":";} return r;}
static PIByteArray macToBytes(const PIString & mac) {PIByteArray r; PIStringList sl = mac.split(":"); piForeachC (PIString & i, sl) r << uchar(i.toInt(16)); return r;}
static PIString applyMask(const PIString & ip, const PIString & mask) {struct in_addr ia; ia.s_addr = inet_addr(ip.data()) & inet_addr(mask.data()); return PIString(inet_ntoa(ia));}
static PIString getBroadcast(const PIString & ip, const PIString & mask) {struct in_addr ia; ia.s_addr = inet_addr(ip.data()) | ~inet_addr(mask.data()); return PIString(inet_ntoa(ia));}
static PIString macFromBytes(const PIByteArray & mac);
static PIByteArray macToBytes(const PIString & mac);
static PIString applyMask(const PIString & ip, const PIString & mask);
static PIString getBroadcast(const PIString & ip, const PIString & mask);
//! \events
//! \{
@@ -369,7 +370,7 @@ public:
//! \}
protected:
PIEthernet(int sock, PIString ip_port);
explicit PIEthernet(int sock, PIString ip_port);
void propertyChanged(const PIString & name);
@@ -388,15 +389,11 @@ protected:
void applyTimeouts();
void applyTimeout(int fd, int opt, double ms);
void applyOptInt(int level, int opt, int val);
#ifndef WINDOWS
static PIString getSockAddr(sockaddr * s) {return s == 0 ? PIString() : PIString(inet_ntoa(((sockaddr_in*)s)->sin_addr));}
#endif
PRIVATE_DECLARATION
int sock, sock_s, wrote;
mutable int port_, port_s, port_c, port_r;
bool connected_, connecting_, listen_threaded, server_bounded;
sockaddr_in addr_, saddr_, raddr_;
mutable PIString ip_, ip_s, ip_c, ip_r;
PIThread server_thread_;
PIVector<PIEthernet * > clients_;