mirror of
https://github.com/stefanocasazza/ULib.git
synced 2025-09-28 19:05:55 +08:00
sync
This commit is contained in:
parent
d4dfd5d9a8
commit
6f299d2ccb
|
@ -463,11 +463,13 @@ static bool setAccessPoint()
|
|||
U_RETURN(true);
|
||||
}
|
||||
|
||||
static inline void setSessionkey()
|
||||
static inline void setSessionkey(const UString& lmac)
|
||||
{
|
||||
U_TRACE_NO_PARAM(5, "::setSessionkey()")
|
||||
U_TRACE(5, "::setSessionkey(%V)", lmac.rep)
|
||||
|
||||
key_session->setBuffer(200U); key_session->snprintf(U_CONSTANT_TO_PARAM("captiveId:%u;apId:%v;deviceId:%v;ip:%v"), addr, ap_label->rep, mac->rep, ip->rep);
|
||||
U_INTERNAL_ASSERT(u_isXMacAddr(U_STRING_TO_PARAM(lmac)))
|
||||
|
||||
key_session->setBuffer(200U); key_session->snprintf(U_CONSTANT_TO_PARAM("captiveId:%u;apId:%v;deviceId:%v;ip:%v"), addr, ap_label->rep, lmac.rep, ip->rep);
|
||||
}
|
||||
|
||||
static void setSessionPolicy()
|
||||
|
@ -670,6 +672,11 @@ static bool getDataFromPOST(bool bpeer)
|
|||
// $3 -> ip
|
||||
// $4 -> peer
|
||||
|
||||
ip->clear();
|
||||
mac->clear();
|
||||
|
||||
peer = U_NULLPTR;
|
||||
|
||||
UFlatBuffer fb, vec;
|
||||
|
||||
fb.setRoot(*UClientImage_Base::body);
|
||||
|
@ -685,13 +692,30 @@ static bool getDataFromPOST(bool bpeer)
|
|||
*ip = vec.AsVectorGet<UString>(2);
|
||||
|
||||
U_INTERNAL_ASSERT(u_isIPv4Addr(U_STRING_TO_PARAM(*ip)))
|
||||
U_INTERNAL_ASSERT(u_isXMacAddr(U_STRING_TO_PARAM(*mac)))
|
||||
|
||||
setSessionPolicy();
|
||||
|
||||
if (bpeer)
|
||||
if (bpeer == false) setSessionPolicy();
|
||||
else
|
||||
{
|
||||
peer = (void*) vec.AsVectorGet<uint64_t>(3);
|
||||
|
||||
UString mac_old = vec.AsVectorGet<UString>(4),
|
||||
label_old = vec.AsVectorGet<UString>(5);
|
||||
|
||||
if (mac_old)
|
||||
{
|
||||
setSessionkey(mac_old);
|
||||
|
||||
if (getSession(U_CONSTANT_TO_PARAM("getDataFromPOST(true)")))
|
||||
{
|
||||
deleteSession();
|
||||
|
||||
writeSessionToLOG(U_CONSTANT_TO_PARAM("DENY_NO_TRAFFIC"));
|
||||
}
|
||||
}
|
||||
|
||||
setSessionPolicy();
|
||||
|
||||
ok = checkDevice();
|
||||
}
|
||||
}
|
||||
|
@ -705,6 +729,22 @@ static void lostSession(bool bclean)
|
|||
|
||||
if (getSession(U_CONSTANT_TO_PARAM("lostSession")))
|
||||
{
|
||||
*ip = rc->getString(9);
|
||||
|
||||
if (u_isIPv4Addr(U_STRING_TO_PARAM(*ip)) == false)
|
||||
{
|
||||
(void) rc->del(U_CONSTANT_TO_PARAM("SESSION:%v"), key_session->rep);
|
||||
(void) rc->zrem(U_CONSTANT_TO_PARAM("SESSION:byLastUpdate %v"), key_session->rep);
|
||||
|
||||
U_LOGGER("*** SESSION(%V) have a wrong ip: %V ***", key_session->rep, ip->rep);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
*mac = rc->getString(8);
|
||||
|
||||
U_INTERNAL_ASSERT(u_isXMacAddr(U_STRING_TO_PARAM(*mac)))
|
||||
|
||||
if (bclean)
|
||||
{
|
||||
*ap_label = rc->getString(7);
|
||||
|
@ -715,15 +755,21 @@ static void lostSession(bool bclean)
|
|||
*ap_hostname = rc->getString(1);
|
||||
}
|
||||
|
||||
*mac = rc->getString(8);
|
||||
*ip = rc->getString(9);
|
||||
|
||||
U_INTERNAL_ASSERT(u_isIPv4Addr(U_STRING_TO_PARAM(*ip)))
|
||||
|
||||
writeSessionToLOG(U_CONSTANT_TO_PARAM("DENY_LOST"));
|
||||
|
||||
deleteSession();
|
||||
}
|
||||
else
|
||||
{
|
||||
uint32_t pos = U_STRING_FIND(*key_session, 10, "deviceId:"); // 10 => U_CONSTANT_SIZE("captiveId:")
|
||||
|
||||
U_INTERNAL_ASSERT_DIFFERS(pos, U_NOT_FOUND)
|
||||
|
||||
const char* ptr = key_session->c_pointer(pos);
|
||||
|
||||
(void) rc->zrem(U_CONSTANT_TO_PARAM("SESSION:byCaptiveIdAndApId %.*s"), key_session->remain(ptr), ptr);
|
||||
(void) rc->zrem(U_CONSTANT_TO_PARAM("SESSION:byLastUpdate %v"), key_session->rep);
|
||||
}
|
||||
}
|
||||
|
||||
static void GET_anagrafica()
|
||||
|
@ -748,7 +794,9 @@ static void GET_clean()
|
|||
|
||||
(void) rc->zrangebyscore(U_CONSTANT_TO_PARAM("SESSION:byLastUpdate 0 %u"), last_update);
|
||||
|
||||
if ((n = rc->vitem.size()))
|
||||
n = rc->vitem.size();
|
||||
|
||||
if (n)
|
||||
{
|
||||
UVector<UString> vec(n);
|
||||
|
||||
|
@ -764,14 +812,19 @@ static void GET_clean()
|
|||
|
||||
(void) rc->zrangebyscore(U_CONSTANT_TO_PARAM("CAPTIVE:byLastUpdate 0 %u"), last_update);
|
||||
|
||||
if ((n = rc->vitem.size()))
|
||||
n = rc->vitem.size();
|
||||
|
||||
if (n)
|
||||
{
|
||||
uint8_t status;
|
||||
UString url(100U);
|
||||
UVector<UString> vec(n);
|
||||
|
||||
vec.copy(rc->vitem);
|
||||
|
||||
for (i = 0; i < n; ++i)
|
||||
{
|
||||
*ap_address = rc->vitem[i];
|
||||
*ap_address = vec[i];
|
||||
|
||||
(void) UIPAddress::getBinaryForm(ap_address->c_str(), addr, true);
|
||||
|
||||
|
@ -807,26 +860,6 @@ static void GET_clean()
|
|||
(void) rc->hmset(U_CONSTANT_TO_PARAM("CAPTIVE:id:%u status %c"), addr, status);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
(void) rc->zrangebyscore(U_CONSTANT_TO_PARAM("DEVICE:bylastAccess 0 %u"), u_now->tv_sec - U_CLEAN_INTERVAL);
|
||||
|
||||
if ((n = rc->vitem.size()))
|
||||
{
|
||||
UString x;
|
||||
UVector<UString> vec(n);
|
||||
|
||||
vec.copy(rc->vitem);
|
||||
|
||||
for (i = 0; i < n; ++i)
|
||||
{
|
||||
x = vec[i];
|
||||
|
||||
(void) rc->del(U_CONSTANT_TO_PARAM("DEVICE:%v"), x.rep);
|
||||
(void) rc->zrem(U_CONSTANT_TO_PARAM("DEVICE:bylastAccess %v"), x.rep);
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1070,6 +1103,8 @@ static void GET_welcome()
|
|||
UHTTP::getFormValue(*mac, U_CONSTANT_TO_PARAM("mac"), 0, 3, 8);
|
||||
UHTTP::getFormValue(*ap_label, U_CONSTANT_TO_PARAM("apid"), 0, 5, 8);
|
||||
|
||||
U_INTERNAL_ASSERT(u_isXMacAddr(U_STRING_TO_PARAM(*mac)))
|
||||
|
||||
setSessionPolicy();
|
||||
|
||||
ok = checkDevice();
|
||||
|
@ -1089,11 +1124,9 @@ static void POST_login()
|
|||
// $3 -> ip
|
||||
// $4 -> peer
|
||||
|
||||
peer = U_NULLPTR;
|
||||
|
||||
bool ko = (getDataFromPOST(true) == false);
|
||||
|
||||
if (*ap_address)
|
||||
if (*mac)
|
||||
{
|
||||
UFlatBuffer fb;
|
||||
char buffer[2] = { '1'-ko, '0'+policySessionNotify }; // deny|permit: ('0'|'1') policy: notify|no_notify|strict_notify ('0'|'1'|'2')
|
||||
|
@ -1106,7 +1139,7 @@ static void POST_login()
|
|||
if (ko) writeSessionToLOG(U_CONSTANT_TO_PARAM("DENY_POLICY"));
|
||||
else
|
||||
{
|
||||
setSessionkey();
|
||||
setSessionkey(*mac);
|
||||
|
||||
(void) rc->hmset(U_CONSTANT_TO_PARAM("SESSION:%v captiveId %u apId %v deviceId %v ip %v created %u pId %v notify %c consume %c counter 0 lastUpdate %u"), key_session->rep,
|
||||
addr, ap_label->rep, mac->rep, ip->rep, u_now->tv_sec, policySessionId->rep, buffer[1], '0'+ap_consume, u_now->tv_sec);
|
||||
|
@ -1288,7 +1321,9 @@ static void POST_info()
|
|||
continue;
|
||||
}
|
||||
|
||||
setSessionkey();
|
||||
U_INTERNAL_ASSERT(u_isXMacAddr(U_STRING_TO_PARAM(*mac)))
|
||||
|
||||
setSessionkey(*mac);
|
||||
|
||||
if (getSession(U_CONSTANT_TO_PARAM("POST_info")) == false) goto del_login;
|
||||
|
||||
|
|
|
@ -514,6 +514,8 @@ static inline void u_gettimenow(void)
|
|||
#endif
|
||||
*/
|
||||
|
||||
U_EXPORT uint32_t u_isDayOfWeek(const char* restrict str) __pure;
|
||||
|
||||
U_EXPORT uint32_t u_strftime1(char* restrict buffer, uint32_t buffer_size, const char* restrict fmt, uint32_t fmt_size);
|
||||
static inline uint32_t u_strftime2(char* restrict buffer, uint32_t buffer_size, const char* restrict fmt, uint32_t fmt_size, time_t when)
|
||||
{
|
||||
|
|
|
@ -553,6 +553,7 @@ U_EXPORT bool u_isDigit( const char* restrict s, uint32_t n) __pure;
|
|||
U_EXPORT bool u_isBase64( const char* restrict s, uint32_t n) __pure;
|
||||
U_EXPORT bool u_isBase64Url( const char* restrict s, uint32_t n) __pure;
|
||||
U_EXPORT bool u_isMacAddr( const char* restrict s, uint32_t n) __pure;
|
||||
U_EXPORT bool u_isXMacAddr( const char* restrict s, uint32_t n) __pure;
|
||||
U_EXPORT bool u_isHostName( const char* restrict s, uint32_t n) __pure;
|
||||
U_EXPORT bool u_isFileName( const char* restrict s, uint32_t n) __pure;
|
||||
U_EXPORT bool u_isWhiteSpace(const char* restrict s, uint32_t n) __pure;
|
||||
|
@ -563,6 +564,33 @@ U_EXPORT bool u_isUrlEncoded( const char* restrict s, uint32_t n, bool bquer
|
|||
|
||||
U_EXPORT const char* u_isUrlScheme(const char* restrict url, uint32_t len) __pure;
|
||||
|
||||
static inline void u_getXMAC(const char* restrict src, char* restrict dst)
|
||||
{
|
||||
U_INTERNAL_TRACE("u_getXMAC(%p,%p)", src, dst)
|
||||
|
||||
U_INTERNAL_ASSERT(u_isMacAddr(src,12+5))
|
||||
|
||||
/**
|
||||
* %2u:%2u:%2u:%2u:%2u:%2u
|
||||
*
|
||||
* (void) memcpy(dst, src, 2);
|
||||
* (void) memcpy(dst+ 2, src+ 2+1, 2);
|
||||
* (void) memcpy(dst+ 4, src+ 4+2, 2);
|
||||
* (void) memcpy(dst+ 6, src+ 6+3, 2);
|
||||
* (void) memcpy(dst+ 8, src+ 8+4, 2);
|
||||
* (void) memcpy(dst+10, src+10+5, 2);
|
||||
*/
|
||||
|
||||
u_put_unalignedp16(dst, *(uint16_t*)src);
|
||||
u_put_unalignedp16(dst+ 2, *(uint16_t*)(src+ 2+1));
|
||||
u_put_unalignedp16(dst+ 4, *(uint16_t*)(src+ 4+2));
|
||||
u_put_unalignedp16(dst+ 6, *(uint16_t*)(src+ 6+3));
|
||||
u_put_unalignedp16(dst+ 8, *(uint16_t*)(src+ 8+4));
|
||||
u_put_unalignedp16(dst+10, *(uint16_t*)(src+10+5));
|
||||
|
||||
U_INTERNAL_ASSERT(u_isXMacAddr(dst,12))
|
||||
}
|
||||
|
||||
static inline int u_equal(const void* restrict s1, const void* restrict s2, uint32_t n, bool ignore_case) /* Equal with ignore case */
|
||||
{
|
||||
U_INTERNAL_TRACE("u_equal(%p,%p,%u)", s1, s2, n)
|
||||
|
|
|
@ -82,24 +82,6 @@ protected:
|
|||
uint32_t addr, ctraffic, time_no_traffic;
|
||||
uucflag flag;
|
||||
|
||||
void getMAC(char* dst)
|
||||
{
|
||||
U_TRACE(0, "UModNoDogPeer::getMAC(%p)", dst)
|
||||
|
||||
U_INTERNAL_ASSERT(u_isMacAddr(U_STRING_TO_PARAM(mac)))
|
||||
|
||||
char* src = mac.data();
|
||||
|
||||
// "%2u:%2u:%2u:%2u:%2u:%2u"
|
||||
|
||||
(void) memcpy(dst, src, 2);
|
||||
(void) memcpy(dst+ 2, src+ 2+1, 2);
|
||||
(void) memcpy(dst+ 4, src+ 4+2, 2);
|
||||
(void) memcpy(dst+ 6, src+ 6+3, 2);
|
||||
(void) memcpy(dst+ 8, src+ 8+4, 2);
|
||||
(void) memcpy(dst+10, src+10+5, 2);
|
||||
}
|
||||
|
||||
private:
|
||||
U_DISALLOW_ASSIGN(UModNoDogPeer)
|
||||
|
||||
|
@ -177,6 +159,8 @@ protected:
|
|||
static UString* fw_env;
|
||||
static UString* extdev;
|
||||
static UString* intdev;
|
||||
static UString* mac_old;
|
||||
static UString* label_old;
|
||||
static UString* hostname;
|
||||
static UString* localnet;
|
||||
static UString* info_data;
|
||||
|
@ -185,6 +169,7 @@ protected:
|
|||
static UString* IP_address_trust;
|
||||
|
||||
static UString* auth_host;
|
||||
static UString* auth_deny;
|
||||
static UString* auth_info;
|
||||
static UString* auth_login;
|
||||
static UString* auth_notify;
|
||||
|
@ -198,7 +183,7 @@ protected:
|
|||
static UIptAccount* ipt;
|
||||
static uint32_t check_expire, T1, T2;
|
||||
static UHttpClient<UTCPSocket>* client;
|
||||
static bool mac_from_dhcp_data_file, bnetwork_interface;
|
||||
static bool mac_from_dhcp_data_file, bnetwork_interface, bdifferent;
|
||||
|
||||
static UIPAllow* pallow;
|
||||
static UModNoDogPeer* peer;
|
||||
|
@ -210,43 +195,43 @@ protected:
|
|||
static UVector<UString>* vLocalNetworkLabel;
|
||||
static UVector<UIPAllow*>* vLocalNetworkMask;
|
||||
|
||||
static void setNewPeer();
|
||||
static bool setNewPeer();
|
||||
static bool preallocatePeersFault();
|
||||
static void executeCommand(const char* type, uint32_t len);
|
||||
static void executeCommand(const char* type, uint32_t len, const UString& mac);
|
||||
|
||||
static void deny()
|
||||
static void deny(const UString& mac)
|
||||
{
|
||||
U_TRACE_NO_PARAM(0, "UNoDogPlugIn::deny()")
|
||||
U_TRACE(0, "UNoDogPlugIn::deny(%V)", mac.rep)
|
||||
|
||||
U_INTERNAL_ASSERT_POINTER(peer)
|
||||
U_INTERNAL_ASSERT(U_peer_permit)
|
||||
|
||||
if (U_peer_allowed)
|
||||
{
|
||||
U_SRV_LOG("WARNING: I should to deny user allowed: IP %v MAC %v", peer->ip.rep, peer->mac.rep);
|
||||
U_SRV_LOG("WARNING: I should to deny user allowed: IP %v MAC %v", peer->ip.rep, mac.rep);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
executeCommand(U_CONSTANT_TO_PARAM("deny"));
|
||||
executeCommand(U_CONSTANT_TO_PARAM("deny"), mac);
|
||||
|
||||
U_SRV_LOG("Peer denied: IP %v MAC %v", peer->ip.rep, peer->mac.rep);
|
||||
U_SRV_LOG("Peer denied: IP %v MAC %v", peer->ip.rep, mac.rep);
|
||||
}
|
||||
|
||||
static void permit()
|
||||
static void permit(const UString& mac)
|
||||
{
|
||||
U_TRACE_NO_PARAM(0, "UNoDogPlugIn::permit()")
|
||||
U_TRACE(0, "UNoDogPlugIn::permit(%V)", mac.rep)
|
||||
|
||||
U_INTERNAL_ASSERT_POINTER(peer)
|
||||
U_INTERNAL_ASSERT_EQUALS(U_peer_permit, false)
|
||||
|
||||
executeCommand(U_CONSTANT_TO_PARAM("permit"));
|
||||
executeCommand(U_CONSTANT_TO_PARAM("permit"), mac);
|
||||
|
||||
peer->_ctime = u_now->tv_sec;
|
||||
|
||||
U_peer_flag |= U_PEER_PERMIT;
|
||||
|
||||
U_SRV_LOG("Peer permitted: IP %v MAC %v", peer->ip.rep, peer->mac.rep);
|
||||
U_SRV_LOG("Peer permitted: IP %v MAC %v", peer->ip.rep, mac.rep);
|
||||
}
|
||||
|
||||
static UString getUrlForSendMsgToPortal(const char* service, uint32_t service_len)
|
||||
|
@ -262,13 +247,6 @@ protected:
|
|||
|
||||
static UString getUrlForSendMsgToPortal(const UString& service) { return getUrlForSendMsgToPortal(U_STRING_TO_PARAM(service)); }
|
||||
|
||||
static uint32_t setRedirect(char* buffer, uint32_t bufsize)
|
||||
{
|
||||
U_TRACE(0, "UNoDogPlugIn::setRedirect(%p,%u)", buffer, bufsize)
|
||||
|
||||
return u__snprintf(buffer, bufsize, U_CONSTANT_TO_PARAM("http://%.*s%.*s"), U_HTTP_HOST_TO_TRACE, U_HTTP_URI_QUERY_TO_TRACE);
|
||||
}
|
||||
|
||||
static uint32_t getApInfo(char* buffer, uint32_t bufsize, const UString& lbl)
|
||||
{
|
||||
U_TRACE(0, "UNoDogPlugIn::getApInfo(%p,%u,%V)", buffer, bufsize, lbl.rep)
|
||||
|
@ -276,18 +254,19 @@ protected:
|
|||
return u__snprintf(buffer, bufsize, U_CONSTANT_TO_PARAM("%v@%v/%v"), lbl.rep, UServer_Base::IP_address->rep, hostname->rep);
|
||||
}
|
||||
|
||||
static uint32_t checkUrl(char* buffer, uint32_t buffer_len, uint32_t sz, const char* user, uint32_t user_len);
|
||||
|
||||
private:
|
||||
U_DISALLOW_COPY_AND_ASSIGN(UNoDogPlugIn)
|
||||
|
||||
static bool getPeer() U_NO_EXPORT;
|
||||
static void erasePeer() U_NO_EXPORT;
|
||||
|
||||
static void setMAC() U_NO_EXPORT;
|
||||
static bool setMAC() U_NO_EXPORT;
|
||||
static void sendLogin() U_NO_EXPORT;
|
||||
static void sendNotify() U_NO_EXPORT;
|
||||
static void eraseTimer() U_NO_EXPORT;
|
||||
static bool checkOldPeer() U_NO_EXPORT;
|
||||
static void setLabelAndMAC() U_NO_EXPORT;
|
||||
static bool setLabelAndMAC() U_NO_EXPORT;
|
||||
static void sendStrictNotify() U_NO_EXPORT;
|
||||
|
||||
// static void printPeers(const char* fmt, uint32_t len) U_NO_EXPORT;
|
||||
|
|
|
@ -374,8 +374,6 @@ public:
|
|||
return cRemoteAddress.getInAddr();
|
||||
}
|
||||
|
||||
UString getMacAddress(const char* device = "eth0");
|
||||
|
||||
/**
|
||||
* This method manage the buffer of the socket connection
|
||||
*/
|
||||
|
|
|
@ -437,6 +437,19 @@ public:
|
|||
|
||||
void String(const char* key, uint32_t len1, const char* str, uint32_t len2) { Key(key, len1); CreateString(str, len2); }
|
||||
|
||||
void StringNull()
|
||||
{
|
||||
U_TRACE_NO_PARAM(0, "UFlatBuffer::StringNull()")
|
||||
|
||||
buffer_str[buffer_idx++] = 0;
|
||||
|
||||
U_INTERNAL_DUMP("buffer_idx = %u buffer_max = %u", buffer_idx, buffer_max)
|
||||
|
||||
U_INTERNAL_ASSERT_MINOR(buffer_idx, buffer_max)
|
||||
|
||||
pushOnStack(buffer_idx, UFlatBufferValue::TYPE_STRING, UFlatBufferValue::BIT_WIDTH_8);
|
||||
}
|
||||
|
||||
// Overloaded Add that tries to call the correct function above
|
||||
|
||||
static void Add() { Null(); }
|
||||
|
@ -1296,15 +1309,19 @@ protected:
|
|||
{
|
||||
U_TRACE(0, "UFlatBuffer::CreateString(%.*S,%u)", len, data, len)
|
||||
|
||||
uint8_t bit_width = UFlatBufferValue::WidthL(len);
|
||||
if (len == 0) StringNull();
|
||||
else
|
||||
{
|
||||
uint8_t bit_width = UFlatBufferValue::WidthL(len);
|
||||
|
||||
WriteScalar<uint32_t>(len, Align(bit_width));
|
||||
WriteScalar<uint32_t>(len, Align(bit_width));
|
||||
|
||||
uint32_t sloc = buffer_idx;
|
||||
uint32_t sloc = buffer_idx;
|
||||
|
||||
WriteBytes(data, len);
|
||||
WriteBytes(data, len);
|
||||
|
||||
pushOnStack(sloc, UFlatBufferValue::TYPE_STRING, bit_width);
|
||||
pushOnStack(sloc, UFlatBufferValue::TYPE_STRING, bit_width);
|
||||
}
|
||||
}
|
||||
|
||||
void CreateVector(uint32_t start, uint32_t vec_len, uint32_t step, bool typed, bool fixed, UFlatBufferValue* pval);
|
||||
|
@ -1363,6 +1380,8 @@ protected:
|
|||
{
|
||||
U_TRACE(0, "UFlatBuffer::WriteBytes<T>(%#.*S,%u)", len, val, len)
|
||||
|
||||
U_INTERNAL_ASSERT_MAJOR(len, 0)
|
||||
|
||||
(void) memcpy(getPointer(), val, len);
|
||||
|
||||
buffer_idx += len;
|
||||
|
|
|
@ -673,6 +673,17 @@ public:
|
|||
U_RETURN(false);
|
||||
}
|
||||
|
||||
bool isXMacAddr() const
|
||||
{
|
||||
U_TRACE_NO_PARAM(0, "UStringRep::isXMacAddr()")
|
||||
|
||||
U_CHECK_MEMORY
|
||||
|
||||
if (u_isXMacAddr(str, _length)) U_RETURN(true);
|
||||
|
||||
U_RETURN(false);
|
||||
}
|
||||
|
||||
bool isEndHeader(uint32_t pos) const __pure;
|
||||
bool findEndHeader(uint32_t pos) const __pure
|
||||
{
|
||||
|
@ -2000,6 +2011,7 @@ public:
|
|||
|
||||
bool isNull() const { return (rep == UStringRep::string_rep_null); }
|
||||
bool isNullTerminated() const { return rep->isNullTerminated(); }
|
||||
bool isXMacAddr() const { return rep->isXMacAddr(); }
|
||||
bool isText(uint32_t pos = 0) const { return rep->isText(pos); }
|
||||
bool isUTF8(uint32_t pos = 0) const { return rep->isUTF8(pos); }
|
||||
bool isUTF16(uint32_t pos = 0) const { return rep->isUTF16(pos); }
|
||||
|
|
|
@ -588,12 +588,14 @@ public:
|
|||
{
|
||||
U_TRACE(0, "Url::encode(%.*S,%u,%p)", len, input, len, &buffer)
|
||||
|
||||
U_ASSERT(buffer.capacity() >= len * 3)
|
||||
U_ASSERT(buffer.capacity() >= len * 2)
|
||||
U_INTERNAL_ASSERT_EQUALS(u_isBase64(input, len), false)
|
||||
|
||||
buffer.rep->_length = u_url_encode((const unsigned char*)input, len, (unsigned char*)buffer.data());
|
||||
|
||||
U_INTERNAL_DUMP("buffer(%u) = %#V", buffer.size(), buffer.rep)
|
||||
|
||||
U_INTERNAL_ASSERT(buffer.invariant())
|
||||
}
|
||||
|
||||
static void encode(const UString& input, UString& buffer) { encode(input.data(), input.size(), buffer); }
|
||||
|
@ -602,12 +604,14 @@ public:
|
|||
{
|
||||
U_TRACE(0, "Url::encode_add(%.*S,%u,%p)", len, input, len, &buffer)
|
||||
|
||||
U_ASSERT(buffer.space() >= len * 3)
|
||||
U_ASSERT(buffer.space() >= (len * 2))
|
||||
U_INTERNAL_ASSERT_EQUALS(u_isBase64(input, len), false)
|
||||
|
||||
buffer.rep->_length += u_url_encode((const unsigned char*)input, len, (unsigned char*)buffer.pend());
|
||||
|
||||
U_INTERNAL_DUMP("buffer(%u) = %#V", buffer.size(), buffer.rep)
|
||||
|
||||
U_INTERNAL_ASSERT(buffer.invariant())
|
||||
}
|
||||
|
||||
static void encode_add(const UString& input, UString& buffer) { encode_add(input.data(), input.size(), buffer); }
|
||||
|
@ -629,6 +633,8 @@ public:
|
|||
buffer.rep->_length = u_url_decode(input, len, (unsigned char*)buffer.data());
|
||||
|
||||
U_INTERNAL_DUMP("buffer(%u) = %#V", buffer.size(), buffer.rep)
|
||||
|
||||
U_INTERNAL_ASSERT(buffer.invariant())
|
||||
}
|
||||
|
||||
static void decode(const UString& input, UString& buffer) { decode(U_STRING_TO_PARAM(input), buffer); }
|
||||
|
|
|
@ -64,10 +64,11 @@ public:
|
|||
|
||||
static bool getARPCache(UString& cache, UVector<UString>& vec);
|
||||
|
||||
static UString getNetworkDevice(const char* exclude); // eth0
|
||||
static UString getIPAddress(int fd, const char* device); // eth0
|
||||
static UString getMacAddress(int fd, const char* device); // eth0
|
||||
static UString getNetworkAddress(int fd, const char* device); // eth0
|
||||
static UString getNetworkDevice(const char* exclude = "eth0");
|
||||
static UString getIPAddress(int fd, const char* device = "eth0");
|
||||
static UString getMacAddress(int fd, const char* device = "eth0");
|
||||
static UString getMacAddress(USocket* s, const char* device = "eth0");
|
||||
static UString getNetworkAddress(int fd, const char* device = "eth0");
|
||||
|
||||
static UString getMacAddress( const char* ip, uint32_t ip_len);
|
||||
static UString getNetworkInterfaceName(const char* ip, uint32_t ip_len);
|
||||
|
|
|
@ -463,6 +463,27 @@ public:
|
|||
setDynamicResponse();
|
||||
}
|
||||
|
||||
static uint32_t setUrl(char* buffer, uint32_t sz)
|
||||
{
|
||||
U_TRACE(0, "UHTTP::setUrl(%p,%u)", buffer, sz)
|
||||
|
||||
uint32_t len = 7+U_http_host_len+U_HTTP_URI_QUERY_LEN;
|
||||
|
||||
if (sz > len)
|
||||
{
|
||||
u_put_unalignedp64(buffer, U_MULTICHAR_CONSTANT64('h','t','t','p',':','/','/','\0'));
|
||||
|
||||
buffer += 7;
|
||||
|
||||
u__memcpy(buffer, u_clientimage_info.http_info.host, U_http_host_len, __PRETTY_FUNCTION__);
|
||||
u__memcpy(buffer+U_http_host_len, u_clientimage_info.http_info.uri, U_HTTP_URI_QUERY_LEN, __PRETTY_FUNCTION__);
|
||||
|
||||
U_RETURN(len);
|
||||
}
|
||||
|
||||
U_RETURN(0);
|
||||
}
|
||||
|
||||
static void setDynamicResponse();
|
||||
static void setResponse(const UString& content_type, UString* pbody = U_NULLPTR);
|
||||
static void setRedirectResponse(int mode, const char* ptr_location, uint32_t len_location);
|
||||
|
|
|
@ -212,7 +212,7 @@ static inline char* u_itoa(uint32_t u, char* restrict p, uint32_t d, uint32_t n)
|
|||
|
||||
static char* num2str32(uint32_t u, char* restrict p)
|
||||
{
|
||||
uint32_t d, n;
|
||||
uint32_t n, d = 0;
|
||||
|
||||
U_INTERNAL_TRACE("num2str32(%u,%p)", u, p)
|
||||
|
||||
|
@ -773,6 +773,25 @@ void u_init_ulib(char** restrict argv)
|
|||
U_DEBUG("u_flag_sse = %u", u_flag_sse)
|
||||
}
|
||||
|
||||
__pure uint32_t u_isDayOfWeek(const char* restrict str)
|
||||
{
|
||||
uint32_t i;
|
||||
|
||||
U_INTERNAL_TRACE("u_isDayOfWeek(%.4s)", str)
|
||||
|
||||
for (i = 0; i < 7; ++i)
|
||||
{
|
||||
if (u_get_unalignedp32(str) == U_MULTICHAR_CONSTANT32(u_day_name[i][0],
|
||||
u_day_name[i][1],
|
||||
u_day_name[i][2],' '))
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return U_NOT_FOUND;
|
||||
}
|
||||
|
||||
/**
|
||||
* Places characters into the array pointed to by s as controlled by the string
|
||||
* pointed to by format. If the total number of resulting characters including
|
||||
|
|
|
@ -3445,6 +3445,20 @@ __pure bool u_isMacAddr(const char* restrict p, uint32_t len)
|
|||
return false;
|
||||
}
|
||||
|
||||
__pure bool u_isXMacAddr(const char* restrict s, uint32_t n)
|
||||
{
|
||||
U_INTERNAL_TRACE("u_isXMacAddr(%.*s,%u)", U_min(n,128), s, n)
|
||||
|
||||
if (n == 12)
|
||||
{
|
||||
U_LOOP_STRING( if (u__isxdigit(c) == false) return false )
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/************************************************************************
|
||||
* From rfc2044: encoding of the Unicode values on UTF-8: *
|
||||
* *
|
||||
|
|
|
@ -297,9 +297,10 @@ time_t UTimeDate::getSecondFromDate(const char* str, bool gmt, struct tm* tm, co
|
|||
if ((tm->tm_mon = u_getMonth(str)))
|
||||
{
|
||||
/**
|
||||
* Jan 25 11:54:00 2005 GMT
|
||||
* Jan 25 11:54:00 2005 GMT
|
||||
* | | | | | |
|
||||
* 0 4 7 10 13 16
|
||||
*
|
||||
*/
|
||||
|
||||
str += 4;
|
||||
|
@ -320,7 +321,37 @@ time_t UTimeDate::getSecondFromDate(const char* str, bool gmt, struct tm* tm, co
|
|||
|
||||
tm->tm_year = u__strtoul(str, 4);
|
||||
}
|
||||
else
|
||||
else if (u_isDayOfWeek(str) != U_NOT_FOUND)
|
||||
{
|
||||
/**
|
||||
* Fri May 4 08:09:15 2018
|
||||
* | | | | | | |
|
||||
* 0 4 8 11 14 17 20
|
||||
*/
|
||||
|
||||
str += 4;
|
||||
|
||||
tm->tm_mon = u_getMonth(str);
|
||||
|
||||
str += 4;
|
||||
|
||||
tm->tm_mday = u_strtoulp(&str);
|
||||
|
||||
tm->tm_hour = u__strtoul(str, 2);
|
||||
|
||||
str += 3;
|
||||
|
||||
tm->tm_min = u__strtoul(str, 2);
|
||||
|
||||
str += 3;
|
||||
|
||||
tm->tm_sec = u__strtoul(str, 2);
|
||||
|
||||
str += 3;
|
||||
|
||||
tm->tm_year = u__strtoul(str, 4);
|
||||
}
|
||||
else if (str[12] == 'Z')
|
||||
{
|
||||
/**
|
||||
* 100212124550Z (zulu time)
|
||||
|
@ -351,8 +382,10 @@ time_t UTimeDate::getSecondFromDate(const char* str, bool gmt, struct tm* tm, co
|
|||
str += 2;
|
||||
|
||||
tm->tm_sec = u__strtoul(str, 2);
|
||||
|
||||
// U_INTERNAL_ASSERT_EQUALS(str[2], 'Z')
|
||||
}
|
||||
else
|
||||
{
|
||||
U_RETURN(0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -477,15 +477,6 @@ U_NO_EXPORT void URDB::copy1(URDB* prdb, uint32_t _offset) // entry present on c
|
|||
uint32_t size_key = RDB_cache_node(n, key.dsize),
|
||||
size_data = RDB_cache_node(n,data.dsize);
|
||||
|
||||
union uucdb_record_header {
|
||||
uint32_t* p;
|
||||
UCDB::cdb_record_header* prec;
|
||||
};
|
||||
|
||||
union uucdb_record_header u = { &size_key };
|
||||
|
||||
U_INTERNAL_DUMP("prec = { %u, %u }", u.prec->klen, u.prec->dlen)
|
||||
|
||||
const char* ptr_key = (const char*)((ptrdiff_t)RDB_cache_node(n, key.dptr) + (ptrdiff_t)journal.map);
|
||||
|
||||
prdb->UCDB::data.dsize = size_data;
|
||||
|
@ -515,10 +506,11 @@ U_NO_EXPORT void URDB::copy1(URDB* prdb, uint32_t _offset) // entry present on c
|
|||
|
||||
char* journal_ptr = prdb->journal.map + RDB_off(prdb);
|
||||
|
||||
U_MEMCPY(journal_ptr, u.prec, sizeof(UCDB::cdb_record_header));
|
||||
|
||||
// i == 0
|
||||
|
||||
u_put_unalignedp32(journal_ptr, size_key);
|
||||
u_put_unalignedp32(journal_ptr+4, size_data);
|
||||
|
||||
journal_ptr += sizeof(UCDB::cdb_record_header);
|
||||
|
||||
U_MEMCPY(journal_ptr, ptr_key, size_key);
|
||||
|
|
|
@ -601,7 +601,7 @@ void ULog::log(const struct iovec* iov, const char* type, int ncount, const char
|
|||
|
||||
U_INTERNAL_ASSERT_MAJOR(ncount, 0)
|
||||
|
||||
char buffer1[2000], buffer2[8192];
|
||||
char buffer1[8192], buffer2[8192];
|
||||
const char* ptr = (const char*)iov[2].iov_base;
|
||||
uint32_t len, u_printf_string_max_length_save = u_printf_string_max_length,
|
||||
sz = iov[2].iov_len, sz1 = iov[0].iov_len + iov[1].iov_len, sz_header = sz1 + sz;
|
||||
|
|
|
@ -1390,7 +1390,7 @@ void UNoCatPlugIn::setNewPeer()
|
|||
{
|
||||
U_INTERNAL_ASSERT(peer->ifname.isNullTerminated())
|
||||
|
||||
UString mac = UServer_Base::csocket->getMacAddress(peer->ifname.data());
|
||||
UString mac = USocketExt::getMacAddress(UServer_Base::csocket, peer->ifname.data());
|
||||
|
||||
if (mac) peer->mac = mac;
|
||||
else
|
||||
|
@ -1464,7 +1464,7 @@ void UNoCatPlugIn::checkOldPeer()
|
|||
|
||||
if ((check_type & U_CHECK_MAC) != 0) // not unifi (L2)
|
||||
{
|
||||
mac = UServer_Base::csocket->getMacAddress(peer->ifname.data());
|
||||
mac = USocketExt::getMacAddress(UServer_Base::csocket, peer->ifname.data());
|
||||
|
||||
if (mac.empty()) return;
|
||||
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
U_CREAT_FUNC(server_plugin_nodog, UNoDogPlugIn)
|
||||
|
||||
int UNoDogPlugIn::fd_stderr;
|
||||
bool UNoDogPlugIn::bdifferent;
|
||||
bool UNoDogPlugIn::bnetwork_interface;
|
||||
bool UNoDogPlugIn::mac_from_dhcp_data_file;
|
||||
void* UNoDogPlugIn::pdata;
|
||||
|
@ -45,14 +46,17 @@ UString* UNoDogPlugIn::fw_env;
|
|||
UString* UNoDogPlugIn::fw_cmd;
|
||||
UString* UNoDogPlugIn::extdev;
|
||||
UString* UNoDogPlugIn::intdev;
|
||||
UString* UNoDogPlugIn::info_data;
|
||||
UString* UNoDogPlugIn::arp_cache;
|
||||
UString* UNoDogPlugIn::mac_old;
|
||||
UString* UNoDogPlugIn::label_old;
|
||||
UString* UNoDogPlugIn::hostname;
|
||||
UString* UNoDogPlugIn::localnet;
|
||||
UString* UNoDogPlugIn::info_data;
|
||||
UString* UNoDogPlugIn::arp_cache;
|
||||
UString* UNoDogPlugIn::allowed_members;
|
||||
UString* UNoDogPlugIn::IP_address_trust;
|
||||
|
||||
UString* UNoDogPlugIn::auth_host;
|
||||
UString* UNoDogPlugIn::auth_deny;
|
||||
UString* UNoDogPlugIn::auth_info;
|
||||
UString* UNoDogPlugIn::auth_login;
|
||||
UString* UNoDogPlugIn::auth_notify;
|
||||
|
@ -84,6 +88,8 @@ UNoDogPlugIn::UNoDogPlugIn() : UEventTime(300L,0L)
|
|||
U_NEW_STRING(fw_env, UString);
|
||||
U_NEW_STRING(extdev, UString);
|
||||
U_NEW_STRING(intdev, UString);
|
||||
U_NEW_STRING(mac_old, UString);
|
||||
U_NEW_STRING(label_old, UString);
|
||||
U_NEW_STRING(hostname, UString);
|
||||
U_NEW_STRING(localnet, UString);
|
||||
U_NEW_STRING(info_data, UString);
|
||||
|
@ -92,6 +98,7 @@ UNoDogPlugIn::UNoDogPlugIn() : UEventTime(300L,0L)
|
|||
U_NEW_STRING(IP_address_trust, UString);
|
||||
|
||||
U_NEW_STRING(auth_host, UString);
|
||||
U_NEW_STRING(auth_deny, UString);
|
||||
U_NEW_STRING(auth_info, UString);
|
||||
U_NEW_STRING(auth_login, UString);
|
||||
U_NEW_STRING(auth_notify, UString);
|
||||
|
@ -123,21 +130,22 @@ UNoDogPlugIn::~UNoDogPlugIn()
|
|||
U_DELETE(fw_env)
|
||||
U_DELETE(extdev)
|
||||
U_DELETE(intdev)
|
||||
U_DELETE(mac_old)
|
||||
U_DELETE(label_old)
|
||||
U_DELETE(hostname)
|
||||
U_DELETE(localnet)
|
||||
U_DELETE(info_data)
|
||||
U_DELETE(arp_cache)
|
||||
U_DELETE(allowed_members)
|
||||
U_DELETE(IP_address_trust)
|
||||
|
||||
U_DELETE(auth_host)
|
||||
U_DELETE(auth_deny)
|
||||
U_DELETE(auth_info)
|
||||
U_DELETE(auth_login)
|
||||
U_DELETE(auth_notify)
|
||||
U_DELETE(auth_service)
|
||||
U_DELETE(auth_strict_notify)
|
||||
|
||||
U_DELETE(varp_cache)
|
||||
U_DELETE(vInternalDevice)
|
||||
U_DELETE(vLocalNetworkSpec)
|
||||
U_DELETE(vLocalNetworkLabel)
|
||||
|
@ -148,6 +156,9 @@ UNoDogPlugIn::~UNoDogPlugIn()
|
|||
if (ipt) U_DELETE(ipt)
|
||||
if (peers) U_DELETE(peers)
|
||||
|
||||
U_DELETE(varp_cache)
|
||||
U_DELETE( arp_cache) // NB: must be here to avoid DEAD OF SOURCE STRING WITH CHILD ALIVE...
|
||||
|
||||
#ifdef USE_LIBTDB
|
||||
if (pdata) U_DELETE((UTDB*)pdata)
|
||||
#endif
|
||||
|
@ -159,7 +170,7 @@ int UModNoDogPeer::handlerTime()
|
|||
|
||||
UNoDogPlugIn::peer = this;
|
||||
|
||||
if (U_peer_permit == false) UNoDogPlugIn::permit();
|
||||
if (U_peer_permit == false) UNoDogPlugIn::permit(U_peer_mac_from_dhcp_data_file ? *UString::str_without_mac : UNoDogPlugIn::peer->mac);
|
||||
|
||||
U_RETURN(-1); // normal
|
||||
}
|
||||
|
@ -246,7 +257,7 @@ U_NO_EXPORT void UNoDogPlugIn::makeInfoData(UFlatBuffer* pfb, void* param)
|
|||
// $6 -> time_no_traffic
|
||||
// -----------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
peer->getMAC(buffer);
|
||||
u_getXMAC(peer->mac.data(), buffer);
|
||||
|
||||
pfb->String(buffer, 12);
|
||||
pfb->UInt(ntohl(peer->addr));
|
||||
|
@ -291,31 +302,6 @@ U_NO_EXPORT void UNoDogPlugIn::makeInfoData(UFlatBuffer* pfb, void* param)
|
|||
}
|
||||
}
|
||||
|
||||
U_NO_EXPORT void UNoDogPlugIn::makeNotifyData(UFlatBuffer* pfb, void* param)
|
||||
{
|
||||
U_TRACE(0, "UNoDogPlugIn::makeNotifyData(%p,%p)", pfb, param)
|
||||
|
||||
U_INTERNAL_DUMP("peer->mac = %V peer->ip = %V peer->label = %V", peer->mac.rep, peer->ip.rep, peer->label.rep)
|
||||
|
||||
char buffer[256];
|
||||
|
||||
pfb->String(buffer, getApInfo(buffer, sizeof(buffer), peer->label));
|
||||
|
||||
peer->getMAC(buffer);
|
||||
|
||||
pfb->String(buffer, 12);
|
||||
pfb->String(peer->ip);
|
||||
}
|
||||
|
||||
U_NO_EXPORT void UNoDogPlugIn::makeLoginData(UFlatBuffer* pfb, void* param)
|
||||
{
|
||||
U_TRACE(0, "UNoDogPlugIn::makeLoginData(%p,%p)", pfb, param)
|
||||
|
||||
makeNotifyData(pfb, param);
|
||||
|
||||
pfb->UInt(U_PTR2INT(peer));
|
||||
}
|
||||
|
||||
int UNoDogPlugIn::handlerTime()
|
||||
{
|
||||
U_TRACE_NO_PARAM(0, "UNoDogPlugIn::handlerTime()")
|
||||
|
@ -345,25 +331,25 @@ int UNoDogPlugIn::handlerTime()
|
|||
U_RETURN(0); // monitoring
|
||||
}
|
||||
|
||||
void UNoDogPlugIn::executeCommand(const char* type, uint32_t len)
|
||||
void UNoDogPlugIn::executeCommand(const char* type, uint32_t len, const UString& mac)
|
||||
{
|
||||
U_TRACE(0, "UNoDogPlugIn::executeCommand(%.*S,%u)", len, type, len)
|
||||
U_TRACE(0, "UNoDogPlugIn::executeCommand(%.*S,%u,%V)", len, type, len, mac.rep)
|
||||
|
||||
U_INTERNAL_ASSERT_POINTER(peer)
|
||||
U_INTERNAL_ASSERT(u_isMacAddr(U_STRING_TO_PARAM(mac)))
|
||||
|
||||
char buffer[256];
|
||||
|
||||
// NB: request(arp|deny|clear|reset|permit|openlist|initialize) mac ip class(Owner|Member|Public) UserDownloadRate UserUploadRate
|
||||
|
||||
UCommand cmd(buffer, u__snprintf(buffer, sizeof(buffer), U_CONSTANT_TO_PARAM("/bin/sh %v %.*s %v %v Member 0 0"),
|
||||
fw_cmd->rep, len, type, (U_peer_mac_from_dhcp_data_file ? *UString::str_without_mac : peer->mac).rep, peer->ip.rep), fw_env);
|
||||
UCommand cmd(buffer, u__snprintf(buffer, sizeof(buffer), U_CONSTANT_TO_PARAM("/bin/sh %v %.*s %v %v Member 0 0"), fw_cmd->rep, len, type, mac.rep, peer->ip.rep), fw_env);
|
||||
|
||||
(void) cmd.executeAndWait(U_NULLPTR, -1, fd_stderr);
|
||||
|
||||
U_SRV_LOG_CMD_MSG_ERR(cmd, false);
|
||||
}
|
||||
|
||||
U_NO_EXPORT void UNoDogPlugIn::setMAC()
|
||||
U_NO_EXPORT bool UNoDogPlugIn::setMAC()
|
||||
{
|
||||
U_TRACE_NO_PARAM(0, "UNoDogPlugIn::setMAC()")
|
||||
|
||||
|
@ -384,7 +370,7 @@ U_NO_EXPORT void UNoDogPlugIn::setMAC()
|
|||
|
||||
U_INTERNAL_ASSERT(ifname.isNullTerminated())
|
||||
|
||||
peer->mac = UServer_Base::csocket->getMacAddress(ifname.data());
|
||||
peer->mac = USocketExt::getMacAddress(UServer_Base::csocket, ifname.data());
|
||||
|
||||
if (peer->mac.empty())
|
||||
{
|
||||
|
@ -405,19 +391,31 @@ U_NO_EXPORT void UNoDogPlugIn::setMAC()
|
|||
|
||||
U_INTERNAL_DUMP("peer->mac = %V", peer->mac.rep)
|
||||
|
||||
if (peer->mac.empty())
|
||||
{
|
||||
peer->mac = *UString::str_without_mac;
|
||||
|
||||
U_RETURN(false);
|
||||
}
|
||||
|
||||
U_INTERNAL_ASSERT(peer->mac)
|
||||
U_INTERNAL_ASSERT(u_isMacAddr(U_STRING_TO_PARAM(peer->mac)))
|
||||
U_ASSERT_EQUALS(peer->mac, USocketExt::getMacAddress(peer->ip))
|
||||
}
|
||||
|
||||
U_RETURN(true);
|
||||
}
|
||||
|
||||
U_NO_EXPORT void UNoDogPlugIn::setLabelAndMAC()
|
||||
U_NO_EXPORT bool UNoDogPlugIn::setLabelAndMAC()
|
||||
{
|
||||
U_TRACE_NO_PARAM(0, "UNoDogPlugIn::setLabelAndMAC()")
|
||||
|
||||
U_INTERNAL_DUMP("pdata = %p mac_from_dhcp_data_file = %b peer->label = %V", pdata, mac_from_dhcp_data_file, peer->label.rep)
|
||||
|
||||
if (pdata == U_NULLPTR) setMAC();
|
||||
if (pdata == U_NULLPTR)
|
||||
{
|
||||
if (setMAC() == false) U_RETURN(false);
|
||||
}
|
||||
#ifdef USE_LIBTDB
|
||||
else
|
||||
{
|
||||
|
@ -441,7 +439,7 @@ U_NO_EXPORT void UNoDogPlugIn::setLabelAndMAC()
|
|||
{
|
||||
uint32_t t5, t6;
|
||||
|
||||
setMAC();
|
||||
if (setMAC() == false) U_RETURN(false);
|
||||
|
||||
if (U_SYSCALL(sscanf, "%p,%S,%p,%p,%p,%p,%p,%p", peer->mac.data(), "%x:%x:%x:%x:%x:%x", &t1, &t2, &t3, &t4, &t5, &t6) == 6)
|
||||
{
|
||||
|
@ -483,18 +481,29 @@ U_NO_EXPORT void UNoDogPlugIn::setLabelAndMAC()
|
|||
mac.snprintf(U_CONSTANT_TO_PARAM("%02x:%02x:%02x:%02x:%02x:%02x"), bytep[0], bytep[1], bytep[2], bytep[3], bytep[4], bytep[5]);
|
||||
|
||||
peer->mac = mac;
|
||||
|
||||
U_INTERNAL_ASSERT(u_isMacAddr(U_STRING_TO_PARAM(mac)))
|
||||
}
|
||||
|
||||
U_SRV_LOG("get data from DHCP_DATA_FILE - key: %#.*S data: %#.10S peer->label = %V peer->mac = %V", sz, (const char*)&ks+start, value.data(), peer->label.rep, peer->mac.rep);
|
||||
}
|
||||
}
|
||||
|
||||
if (peer->mac.empty())
|
||||
{
|
||||
peer->mac = *UString::str_without_mac;
|
||||
|
||||
U_RETURN(false);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
U_INTERNAL_DUMP("peer->label = %V peer->mac = %V", peer->label.rep, peer->mac.rep)
|
||||
|
||||
U_RETURN(true);
|
||||
}
|
||||
|
||||
void UNoDogPlugIn::setNewPeer()
|
||||
bool UNoDogPlugIn::setNewPeer()
|
||||
{
|
||||
U_TRACE_NO_PARAM(0, "UNoDogPlugIn::setNewPeer()")
|
||||
|
||||
|
@ -504,16 +513,23 @@ void UNoDogPlugIn::setNewPeer()
|
|||
|
||||
if (U_peer_index_network == 0xFF)
|
||||
{
|
||||
U_ERROR("IP address for new peer %V not found in LocalNetworkMask %V", peer->ip.rep, localnet->rep);
|
||||
U_SRV_LOG("WARNING: IP address for new peer %V not found in LocalNetworkMask %V", peer->ip.rep, localnet->rep);
|
||||
|
||||
U_RETURN(false);
|
||||
}
|
||||
|
||||
peer->label = ((uint32_t)U_peer_index_network >= vLocalNetworkLabel->size() ? *UString::str_without_label : (*vLocalNetworkLabel)[U_peer_index_network]);
|
||||
|
||||
setLabelAndMAC();
|
||||
if (setLabelAndMAC())
|
||||
{
|
||||
if (mac_from_dhcp_data_file) U_peer_flag |= U_PEER_MAC_FROM_DHCP_DATA_FILE;
|
||||
|
||||
if (mac_from_dhcp_data_file) U_peer_flag |= U_PEER_MAC_FROM_DHCP_DATA_FILE;
|
||||
peers->insert((const char*)&(peer->addr), sizeof(uint32_t), peer); // peers->insert(peer->ip, peer);
|
||||
|
||||
peers->insert((const char*)&(peer->addr), sizeof(uint32_t), peer); // peers->insert(peer->ip, peer);
|
||||
U_RETURN(true);
|
||||
}
|
||||
|
||||
U_RETURN(false);
|
||||
}
|
||||
|
||||
U_NO_EXPORT bool UNoDogPlugIn::getPeer()
|
||||
|
@ -577,6 +593,50 @@ U_NO_EXPORT void UNoDogPlugIn::eraseTimer()
|
|||
}
|
||||
}
|
||||
|
||||
U_NO_EXPORT void UNoDogPlugIn::makeNotifyData(UFlatBuffer* pfb, void* param)
|
||||
{
|
||||
U_TRACE(0, "UNoDogPlugIn::makeNotifyData(%p,%p)", pfb, param)
|
||||
|
||||
U_INTERNAL_DUMP("peer->mac = %V peer->ip = %V peer->label = %V", peer->mac.rep, peer->ip.rep, peer->label.rep)
|
||||
|
||||
char buffer[256];
|
||||
|
||||
pfb->String(buffer, getApInfo(buffer, sizeof(buffer), (bdifferent == false ? peer->label : *label_old)));
|
||||
|
||||
u_getXMAC(peer->mac.data(), buffer);
|
||||
|
||||
pfb->String(buffer, 12);
|
||||
pfb->String(peer->ip);
|
||||
}
|
||||
|
||||
U_NO_EXPORT void UNoDogPlugIn::makeLoginData(UFlatBuffer* pfb, void* param)
|
||||
{
|
||||
U_TRACE(0, "UNoDogPlugIn::makeLoginData(%p,%p)", pfb, param)
|
||||
|
||||
makeNotifyData(pfb, param);
|
||||
|
||||
pfb->UInt(U_PTR2INT(peer));
|
||||
|
||||
if (bdifferent == false)
|
||||
{
|
||||
pfb->StringNull();
|
||||
pfb->StringNull();
|
||||
}
|
||||
else
|
||||
{
|
||||
bdifferent = false;
|
||||
|
||||
pfb->String(peer->label);
|
||||
peer->label = *label_old;
|
||||
|
||||
char buffer[16];
|
||||
|
||||
u_getXMAC(mac_old->data(), buffer);
|
||||
|
||||
pfb->String(buffer, 12);
|
||||
}
|
||||
}
|
||||
|
||||
U_NO_EXPORT void UNoDogPlugIn::sendLogin()
|
||||
{
|
||||
U_TRACE_NO_PARAM(0, "UNoDogPlugIn::sendLogin()")
|
||||
|
@ -614,53 +674,6 @@ U_NO_EXPORT void UNoDogPlugIn::sendStrictNotify()
|
|||
}
|
||||
}
|
||||
|
||||
U_NO_EXPORT bool UNoDogPlugIn::checkOldPeer()
|
||||
{
|
||||
U_TRACE_NO_PARAM(0, "UNoDogPlugIn::checkOldPeer()")
|
||||
|
||||
U_INTERNAL_ASSERT_POINTER(peer)
|
||||
U_ASSERT(peer->ip.equal(U_CLIENT_ADDRESS_TO_PARAM))
|
||||
|
||||
UString mac = peer->mac,
|
||||
llabel = peer->label;
|
||||
|
||||
peer->mac = *UString::str_without_mac;
|
||||
|
||||
setLabelAndMAC();
|
||||
|
||||
if ( mac != peer->mac ||
|
||||
llabel != peer->label)
|
||||
{
|
||||
// NB: we assume that the current peer is a different user that has acquired the same IP address from the DHCP...
|
||||
|
||||
U_SRV_LOG("WARNING: different user for peer (IP %v): (MAC %v LABEL %v) => (MAC %v LABEL %v)", peer->ip.rep, mac.rep, llabel.rep, peer->mac.rep, peer->label.rep);
|
||||
|
||||
U_INTERNAL_ASSERT(mac)
|
||||
U_INTERNAL_ASSERT(llabel)
|
||||
U_INTERNAL_ASSERT(peer->mac)
|
||||
U_INTERNAL_ASSERT(peer->label)
|
||||
|
||||
if (U_peer_permit)
|
||||
{
|
||||
UString x;
|
||||
|
||||
if (U_peer_mac_from_dhcp_data_file == false)
|
||||
{
|
||||
x = peer->mac;
|
||||
peer->mac = mac;
|
||||
}
|
||||
|
||||
deny();
|
||||
|
||||
if (U_peer_mac_from_dhcp_data_file == false) peer->mac = x;
|
||||
}
|
||||
|
||||
U_RETURN(false);
|
||||
}
|
||||
|
||||
U_RETURN(true);
|
||||
}
|
||||
|
||||
// Server-wide hooks
|
||||
|
||||
int UNoDogPlugIn::handlerConfig(UFileConfig& cfg)
|
||||
|
@ -859,6 +872,7 @@ int UNoDogPlugIn::handlerInit()
|
|||
}
|
||||
|
||||
*auth_info = getUrlForSendMsgToPortal(U_CONSTANT_TO_PARAM("/info"));
|
||||
*auth_deny = getUrlForSendMsgToPortal(U_CONSTANT_TO_PARAM("/deny"));
|
||||
*auth_login = getUrlForSendMsgToPortal(U_CONSTANT_TO_PARAM("/login"));
|
||||
*auth_notify = getUrlForSendMsgToPortal(U_CONSTANT_TO_PARAM("/notify"));
|
||||
*auth_strict_notify = getUrlForSendMsgToPortal(U_CONSTANT_TO_PARAM("/strict_notify"));
|
||||
|
@ -1036,15 +1050,40 @@ end:
|
|||
|
||||
U_peer_index_network = index_network;
|
||||
|
||||
setNewPeer();
|
||||
(void) setNewPeer();
|
||||
|
||||
permit();
|
||||
permit(peer->mac);
|
||||
}
|
||||
}
|
||||
|
||||
U_RETURN(U_PLUGIN_HANDLER_OK);
|
||||
}
|
||||
|
||||
uint32_t UNoDogPlugIn::checkUrl(char* buffer, uint32_t buffer_len, uint32_t sz, const char* user, uint32_t user_len)
|
||||
{
|
||||
U_TRACE(0, "UNoDogPlugIn::checkUrl(%p,%u,%u,%.*S,%u)", buffer, buffer_len, sz, user_len, user, user_len)
|
||||
|
||||
if (sz > (buffer_len / 3))
|
||||
{
|
||||
U_SRV_LOG("url request size (%u bytes) too big from %.*s USER", sz, user_len, user);
|
||||
|
||||
U_RETURN(0);
|
||||
}
|
||||
|
||||
if (auth_host->equal(U_HTTP_HOST_TO_PARAM))
|
||||
{
|
||||
U_SRV_LOG("request url (%.*S) invalid from %.*s USER", U_HTTP_HOST_TO_TRACE, user_len, user);
|
||||
|
||||
U_RETURN(0);
|
||||
}
|
||||
|
||||
sz = UHTTP::setUrl(buffer, buffer_len);
|
||||
|
||||
U_INTERNAL_ASSERT_MAJOR(sz, 0)
|
||||
|
||||
U_RETURN(sz);
|
||||
}
|
||||
|
||||
// Connection-wide hooks
|
||||
|
||||
int UNoDogPlugIn::handlerRequest()
|
||||
|
@ -1116,7 +1155,7 @@ int UNoDogPlugIn::handlerRequest()
|
|||
{
|
||||
eraseTimer();
|
||||
|
||||
if (U_peer_permit) deny();
|
||||
if (U_peer_permit) deny(U_peer_mac_from_dhcp_data_file ? *UString::str_without_mac : peer->mac);
|
||||
|
||||
erasePeer();
|
||||
|
||||
|
@ -1135,7 +1174,7 @@ int UNoDogPlugIn::handlerRequest()
|
|||
{
|
||||
eraseTimer();
|
||||
|
||||
if (U_peer_permit == false) permit();
|
||||
if (U_peer_permit == false) permit(U_peer_mac_from_dhcp_data_file ? *UString::str_without_mac : peer->mac);
|
||||
|
||||
goto end;
|
||||
}
|
||||
|
@ -1183,7 +1222,7 @@ int UNoDogPlugIn::handlerRequest()
|
|||
|
||||
U_SRV_LOG("AUTH request to logout user(%u): IP %v MAC %v", i, peer->ip.rep, peer->mac.rep);
|
||||
|
||||
if (U_peer_permit) deny();
|
||||
if (U_peer_permit) deny(U_peer_mac_from_dhcp_data_file ? *UString::str_without_mac : peer->mac);
|
||||
else
|
||||
{
|
||||
eraseTimer();
|
||||
|
@ -1194,10 +1233,7 @@ int UNoDogPlugIn::handlerRequest()
|
|||
erasePeer();
|
||||
}
|
||||
}
|
||||
else if (U_HTTP_URI_STREQ("/ping"))
|
||||
{
|
||||
}
|
||||
else
|
||||
else if (U_HTTP_URI_STREQ("/ping") == false)
|
||||
{
|
||||
bad: UHTTP::setBadRequest();
|
||||
}
|
||||
|
@ -1209,6 +1245,15 @@ bad: UHTTP::setBadRequest();
|
|||
|
||||
// printPeers(U_CONSTANT_TO_PARAM("user request"));
|
||||
|
||||
if (U_HTTP_URI_QUERY_LEN > (sizeof(buffer) / 4))
|
||||
{
|
||||
U_SRV_LOG("request url query size (%u bytes) too big", U_HTTP_URI_QUERY_LEN);
|
||||
|
||||
goto end;
|
||||
}
|
||||
|
||||
sz = 7+U_http_host_len+U_HTTP_URI_QUERY_LEN;
|
||||
|
||||
addr = UServer_Base::getClientAddress();
|
||||
|
||||
if (getPeer())
|
||||
|
@ -1220,9 +1265,45 @@ bad: UHTTP::setBadRequest();
|
|||
U_SRV_LOG("Start REQUEST_FROM_OLD_USER phase of plugin nodog: peer = %p", peer);
|
||||
|
||||
U_INTERNAL_ASSERT(peer->mac)
|
||||
U_INTERNAL_ASSERT(peer->label)
|
||||
U_ASSERT(peer->ip.equal(U_CLIENT_ADDRESS_TO_PARAM))
|
||||
U_INTERNAL_ASSERT(u_isMacAddr(U_STRING_TO_PARAM(peer->mac)))
|
||||
|
||||
if (checkUrl(buffer, sizeof(buffer), sz, U_CONSTANT_TO_PARAM("OLD")) == 0) goto end;
|
||||
|
||||
*mac_old = peer->mac;
|
||||
*label_old = peer->label;
|
||||
|
||||
peer->mac.clear();
|
||||
|
||||
if (setLabelAndMAC() == false) goto end;
|
||||
|
||||
if ( *mac_old != peer->mac ||
|
||||
*label_old != peer->label)
|
||||
{
|
||||
// NB: we assume that the current peer is a different user that has acquired the same IP address from the DHCP...
|
||||
|
||||
U_SRV_LOG("WARNING: different user for peer (IP %v): (MAC %v LABEL %v) => (MAC %v LABEL %v)", peer->ip.rep, mac_old->rep, label_old->rep, peer->mac.rep, peer->label.rep);
|
||||
|
||||
U_INTERNAL_ASSERT(peer->mac)
|
||||
U_INTERNAL_ASSERT(peer->label)
|
||||
|
||||
if (peer->mac != *mac_old)
|
||||
{
|
||||
bdifferent = true;
|
||||
|
||||
if (U_peer_permit &&
|
||||
U_peer_mac_from_dhcp_data_file == false)
|
||||
{
|
||||
deny(*mac_old);
|
||||
}
|
||||
|
||||
goto log;
|
||||
}
|
||||
|
||||
goto welcome;
|
||||
}
|
||||
|
||||
if (U_HTTP_URI_MEMEQ("/nodog_peer_allow.sh"))
|
||||
{
|
||||
if (U_HTTP_QUERY_MEMEQ("url=") &&
|
||||
|
@ -1252,7 +1333,7 @@ bad: UHTTP::setBadRequest();
|
|||
{
|
||||
sendStrictNotify();
|
||||
|
||||
goto next1;
|
||||
goto next;
|
||||
}
|
||||
|
||||
U_INTERNAL_DUMP("T2 = %u U_peer_policy = %C", T2, U_peer_policy)
|
||||
|
@ -1262,9 +1343,9 @@ bad: UHTTP::setBadRequest();
|
|||
{
|
||||
sendNotify();
|
||||
|
||||
next1: eraseTimer();
|
||||
next: eraseTimer();
|
||||
|
||||
if (U_peer_permit == false) permit();
|
||||
if (U_peer_permit == false) permit(U_peer_mac_from_dhcp_data_file ? *UString::str_without_mac : peer->mac);
|
||||
|
||||
UHTTP::setRedirectResponse(UHTTP::NO_BODY, U_STRING_TO_PARAM(redirect));
|
||||
}
|
||||
|
@ -1297,10 +1378,6 @@ next1: eraseTimer();
|
|||
goto end;
|
||||
}
|
||||
|
||||
sz = setRedirect(buffer, sizeof(buffer));
|
||||
|
||||
if (checkOldPeer() == false) goto log;
|
||||
|
||||
goto welcome;
|
||||
}
|
||||
|
||||
|
@ -1308,6 +1385,16 @@ next1: eraseTimer();
|
|||
// request from NEW user
|
||||
// ---------------------
|
||||
|
||||
if (U_HTTP_URI_MEMEQ("/nodog_peer_allow.sh") ||
|
||||
U_HTTP_URI_MEMEQ("/nodog_peer_delay.sh"))
|
||||
{
|
||||
U_SRV_LOG("/nodog_peer_(allow|delay).sh from NEW USER: %.*s", U_CLIENT_ADDRESS_TO_PARAM);
|
||||
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (checkUrl(buffer, sizeof(buffer), sz, U_CONSTANT_TO_PARAM("NEW")) == 0) goto end;
|
||||
|
||||
index_network = UIPAllow::find(UServer_Base::client_address, *vLocalNetworkMask);
|
||||
|
||||
U_INTERNAL_DUMP("index_network = %u", index_network)
|
||||
|
@ -1332,9 +1419,12 @@ next1: eraseTimer();
|
|||
|
||||
U_ASSERT_EQUALS(peer->ip, UIPAddress::toString(peer->addr))
|
||||
|
||||
setNewPeer();
|
||||
if (setNewPeer() == false)
|
||||
{
|
||||
U_DELETE(peer)
|
||||
|
||||
sz = setRedirect(buffer, sizeof(buffer));
|
||||
goto end;
|
||||
}
|
||||
|
||||
log: sendLogin();
|
||||
|
||||
|
@ -1342,7 +1432,7 @@ log: sendLogin();
|
|||
|
||||
if (T1 == 0)
|
||||
{
|
||||
permit();
|
||||
permit(U_peer_mac_from_dhcp_data_file ? *UString::str_without_mac : peer->mac);
|
||||
|
||||
UHTTP::setRedirectResponse(UHTTP::NO_BODY, buffer, sz);
|
||||
}
|
||||
|
@ -1363,7 +1453,7 @@ welcome: x = UString::getUBuffer();
|
|||
|
||||
Url::encode_add(buffer, sz, x);
|
||||
|
||||
peer->getMAC(buffer);
|
||||
u_getXMAC(peer->mac.data(), buffer);
|
||||
|
||||
x.snprintf_add(U_CONSTANT_TO_PARAM("&mac=%.12s&apid=%v&gateway=%v%%3A%u"),
|
||||
buffer, peer->label.rep, (bnetwork_interface ? pallow->host : *UServer_Base::IP_address).rep, UServer_Base::port);
|
||||
|
|
|
@ -32,13 +32,6 @@ U_DUMP_KERNEL_VERSION(LINUX_VERSION_CODE)
|
|||
# include <ulib/ssl/net/sslsocket.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_IOCTL_H
|
||||
# include <sys/ioctl.h>
|
||||
#endif
|
||||
#ifdef HAVE_ARPA_INET_H
|
||||
# include <net/if_arp.h>
|
||||
#endif
|
||||
|
||||
int USocket::incoming_cpu = -1;
|
||||
int USocket::iBackLog = SOMAXCONN;
|
||||
int USocket::accept4_flags; // If flags is 0, then accept4() is the same as accept()
|
||||
|
@ -215,78 +208,6 @@ void USocket::setLocal()
|
|||
}
|
||||
}
|
||||
|
||||
UString USocket::getMacAddress(const char* device)
|
||||
{
|
||||
U_TRACE(1, "USocket::getMacAddress(%S)", device)
|
||||
|
||||
U_INTERNAL_ASSERT_POINTER(device)
|
||||
|
||||
UString result(100U);
|
||||
|
||||
#if defined(U_LINUX) && defined(HAVE_SYS_IOCTL_H) && defined(HAVE_ARPA_INET_H)
|
||||
U_INTERNAL_ASSERT(isOpen())
|
||||
|
||||
/**
|
||||
* ARP ioctl request
|
||||
*
|
||||
* struct arpreq {
|
||||
* struct sockaddr arp_pa; // Protocol address
|
||||
* struct sockaddr arp_ha; // Hardware address
|
||||
* int arp_flags; // Flags
|
||||
* struct sockaddr arp_netmask; // Netmask (only for proxy arps)
|
||||
* char arp_dev[16];
|
||||
* };
|
||||
*/
|
||||
|
||||
struct arpreq arpreq;
|
||||
|
||||
(void) U_SYSCALL(memset, "%p,%d,%u", &arpreq, 0, sizeof(arpreq));
|
||||
|
||||
union uupsockaddr {
|
||||
struct sockaddr* p;
|
||||
struct sockaddr_in* psin;
|
||||
};
|
||||
|
||||
union uupsockaddr u = { &arpreq.arp_pa };
|
||||
|
||||
// arp_pa must be an AF_INET address
|
||||
// arp_ha must have the same type as the device which is specified in arp_dev
|
||||
// arp_dev is a zero-terminated string which names a device
|
||||
|
||||
u.psin->sin_family = AF_INET;
|
||||
u.psin->sin_addr.s_addr = cRemoteAddress.getInAddr();
|
||||
arpreq.arp_ha.sa_family = AF_INET;
|
||||
|
||||
(void) u__strncpy(arpreq.arp_dev, device, 15);
|
||||
|
||||
if (U_SYSCALL(ioctl, "%d,%d,%p", iSockDesc, SIOCGARP, &arpreq) == 0)
|
||||
{
|
||||
if ((arpreq.arp_flags & ATF_COM) != 0)
|
||||
{
|
||||
unsigned char* hwaddr = (unsigned char*)arpreq.arp_ha.sa_data;
|
||||
|
||||
result.snprintf(U_CONSTANT_TO_PARAM("%02x:%02x:%02x:%02x:%02x:%02x"),
|
||||
hwaddr[0] & 0xFF,
|
||||
hwaddr[1] & 0xFF,
|
||||
hwaddr[2] & 0xFF,
|
||||
hwaddr[3] & 0xFF,
|
||||
hwaddr[4] & 0xFF,
|
||||
hwaddr[5] & 0xFF);
|
||||
|
||||
/**
|
||||
* if (arpreq.arp_flags & ATF_PERM) printf("PERM");
|
||||
* if (arpreq.arp_flags & ATF_PUBL) printf("PUBLISHED");
|
||||
* if (arpreq.arp_flags & ATF_USETRAILERS) printf("TRAILERS");
|
||||
* if (arpreq.arp_flags & ATF_PROXY) printf("PROXY");
|
||||
*/
|
||||
}
|
||||
// else printf("*** INCOMPLETE ***");
|
||||
}
|
||||
#endif
|
||||
|
||||
U_RETURN_STRING(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* The method is called with a local IP address and port number to bind the socket to.
|
||||
* A default port number of zero is a wildcard and lets the OS choose the port number
|
||||
|
|
|
@ -36,6 +36,9 @@
|
|||
#ifdef HAVE_SYS_IOCTL_H
|
||||
# include <sys/ioctl.h>
|
||||
#endif
|
||||
#ifdef HAVE_ARPA_INET_H
|
||||
# include <net/if_arp.h>
|
||||
#endif
|
||||
|
||||
#ifdef USE_C_ARES
|
||||
# include <ares.h>
|
||||
|
@ -513,7 +516,7 @@ loop:
|
|||
|
||||
for (int i = 0; i < iovcnt; ++i) sum += iov[i].iov_len;
|
||||
|
||||
U_INTERNAL_ASSERT_EQUALS(sum, count)
|
||||
U_INTERNAL_ASSERT_EQUALS(sum, count-byte_written)
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
@ -1074,6 +1077,82 @@ UString USocketExt::getMacAddress(int fd, const char* device)
|
|||
hwaddr[3] & 0xFF,
|
||||
hwaddr[4] & 0xFF,
|
||||
hwaddr[5] & 0xFF);
|
||||
|
||||
U_INTERNAL_ASSERT(u_isMacAddr(U_STRING_TO_PARAM(result)))
|
||||
}
|
||||
#endif
|
||||
|
||||
U_RETURN_STRING(result);
|
||||
}
|
||||
|
||||
UString USocketExt::getMacAddress(USocket* socket, const char* device)
|
||||
{
|
||||
U_TRACE(1, "USocketExt::getMacAddress(%p,%S)", socket, device)
|
||||
|
||||
U_INTERNAL_ASSERT_POINTER(device)
|
||||
|
||||
UString result(100U);
|
||||
|
||||
#if defined(U_LINUX) && defined(HAVE_SYS_IOCTL_H) && defined(HAVE_ARPA_INET_H)
|
||||
U_INTERNAL_ASSERT(socket->isOpen())
|
||||
|
||||
/**
|
||||
* ARP ioctl request
|
||||
*
|
||||
* struct arpreq {
|
||||
* struct sockaddr arp_pa; // Protocol address
|
||||
* struct sockaddr arp_ha; // Hardware address
|
||||
* int arp_flags; // Flags
|
||||
* struct sockaddr arp_netmask; // Netmask (only for proxy arps)
|
||||
* char arp_dev[16];
|
||||
* };
|
||||
*/
|
||||
|
||||
struct arpreq arpreq;
|
||||
|
||||
(void) U_SYSCALL(memset, "%p,%d,%u", &arpreq, 0, sizeof(arpreq));
|
||||
|
||||
union uupsockaddr {
|
||||
struct sockaddr* p;
|
||||
struct sockaddr_in* psin;
|
||||
};
|
||||
|
||||
union uupsockaddr u = { &arpreq.arp_pa };
|
||||
|
||||
// arp_pa must be an AF_INET address
|
||||
// arp_ha must have the same type as the device which is specified in arp_dev
|
||||
// arp_dev is a zero-terminated string which names a device
|
||||
|
||||
u.psin->sin_family = AF_INET;
|
||||
u.psin->sin_addr.s_addr = socket->getClientAddress();
|
||||
arpreq.arp_ha.sa_family = AF_INET;
|
||||
|
||||
(void) u__strncpy(arpreq.arp_dev, device, 15);
|
||||
|
||||
if (U_SYSCALL(ioctl, "%d,%d,%p", socket->iSockDesc, SIOCGARP, &arpreq) == 0)
|
||||
{
|
||||
if ((arpreq.arp_flags & ATF_COM) != 0)
|
||||
{
|
||||
unsigned char* hwaddr = (unsigned char*)arpreq.arp_ha.sa_data;
|
||||
|
||||
result.snprintf(U_CONSTANT_TO_PARAM("%02x:%02x:%02x:%02x:%02x:%02x"),
|
||||
hwaddr[0] & 0xFF,
|
||||
hwaddr[1] & 0xFF,
|
||||
hwaddr[2] & 0xFF,
|
||||
hwaddr[3] & 0xFF,
|
||||
hwaddr[4] & 0xFF,
|
||||
hwaddr[5] & 0xFF);
|
||||
|
||||
U_INTERNAL_ASSERT(u_isMacAddr(U_STRING_TO_PARAM(result)))
|
||||
|
||||
/**
|
||||
* if (arpreq.arp_flags & ATF_PERM) printf("PERM");
|
||||
* if (arpreq.arp_flags & ATF_PUBL) printf("PUBLISHED");
|
||||
* if (arpreq.arp_flags & ATF_USETRAILERS) printf("TRAILERS");
|
||||
* if (arpreq.arp_flags & ATF_PROXY) printf("PROXY");
|
||||
*/
|
||||
}
|
||||
// else printf("*** INCOMPLETE ***");
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -6957,6 +6957,7 @@ void UHTTP::setRedirectResponse(int mode, const char* ptr_location, uint32_t len
|
|||
|
||||
UClientImage_Base::resetPipelineAndSetCloseConnection();
|
||||
|
||||
uint32_t sz;
|
||||
UString tmp(100U + len_location);
|
||||
|
||||
tmp.snprintf(U_CONSTANT_TO_PARAM("%s%.*s\r\n"),
|
||||
|
@ -6979,12 +6980,11 @@ void UHTTP::setRedirectResponse(int mode, const char* ptr_location, uint32_t len
|
|||
|
||||
if ((mode & NO_BODY) != 0)
|
||||
{
|
||||
ext->setBuffer(U_CAPACITY);
|
||||
sz = tmp.size();
|
||||
|
||||
UClientImage_Base::body->clear(); // clean body to avoid writev() in response...
|
||||
ext->setBuffer(sz + U_CONSTANT_SIZE("Content-Length: 0\r\n\r\n"));
|
||||
|
||||
char* ptr = ext->data();
|
||||
uint32_t sz = tmp.size();
|
||||
|
||||
U_MEMCPY(ptr, tmp.data(), sz);
|
||||
ptr += sz;
|
||||
|
@ -6993,38 +6993,40 @@ void UHTTP::setRedirectResponse(int mode, const char* ptr_location, uint32_t len
|
|||
u_put_unalignedp64(ptr+8, U_MULTICHAR_CONSTANT64('L','e','n','g','t','h',':',' '));
|
||||
u_put_unalignedp64(ptr+16, U_MULTICHAR_CONSTANT64('0','\r','\n','\r','\n','\0','\0','\0'));
|
||||
|
||||
ext->size_adjust(ptr + U_CONSTANT_SIZE("Content-Length: 0\r\n\r\n"));
|
||||
ext->size_adjust(sz);
|
||||
|
||||
UClientImage_Base::body->clear(); // clean body to avoid writev() in response...
|
||||
|
||||
handlerResponse();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
char msg[4096];
|
||||
uint32_t sz, len;
|
||||
|
||||
if ((mode & NETWORK_AUTHENTICATION_REQUIRED) != 0)
|
||||
{
|
||||
len = u__snprintf(msg, sizeof(msg), U_CONSTANT_TO_PARAM("You need to <a href=\"%.*s\">authenticate with the local network</a> in order to get access"),
|
||||
len_location, ptr_location);
|
||||
}
|
||||
else
|
||||
{
|
||||
len = u__snprintf(msg, sizeof(msg), U_CONSTANT_TO_PARAM("The document has moved <a href=\"%.*s\">here</a>"), len_location, ptr_location);
|
||||
uint32_t len;
|
||||
char msg[4096];
|
||||
|
||||
if ((mode & NETWORK_AUTHENTICATION_REQUIRED) != 0)
|
||||
{
|
||||
len = u__snprintf(msg, sizeof(msg), U_CONSTANT_TO_PARAM("You need to <a href=\"%.*s\">authenticate with the local network</a> in order to get access"),
|
||||
len_location, ptr_location);
|
||||
}
|
||||
else
|
||||
{
|
||||
len = u__snprintf(msg, sizeof(msg), U_CONSTANT_TO_PARAM("The document has moved <a href=\"%.*s\">here</a>"), len_location, ptr_location);
|
||||
}
|
||||
|
||||
const char* status = getStatusDescription(&sz);
|
||||
UString body(500U + len_location), content_type(U_CAPACITY);
|
||||
|
||||
body.snprintf(U_CONSTANT_TO_PARAM(U_STR_FMR_BODY),
|
||||
U_http_info.nResponseCode, sz, status,
|
||||
sz, status,
|
||||
len, msg);
|
||||
|
||||
(void) content_type.assign(U_CONSTANT_TO_PARAM(U_CTYPE_HTML "\r\n"));
|
||||
(void) content_type.append(tmp);
|
||||
|
||||
setResponse(content_type, &body);
|
||||
}
|
||||
|
||||
const char* status = getStatusDescription(&sz);
|
||||
UString body(500U + len_location), content_type(U_CAPACITY);
|
||||
|
||||
body.snprintf(U_CONSTANT_TO_PARAM(U_STR_FMR_BODY),
|
||||
U_http_info.nResponseCode, sz, status,
|
||||
sz, status,
|
||||
len, msg);
|
||||
|
||||
(void) content_type.assign(U_CONSTANT_TO_PARAM(U_CTYPE_HTML "\r\n"));
|
||||
(void) content_type.append(tmp);
|
||||
|
||||
setResponse(content_type, &body);
|
||||
}
|
||||
|
||||
void UHTTP::setErrorResponse(const UString& content_type, int code, const char* fmt, uint32_t fmt_size, bool bformat)
|
||||
|
|
|
@ -28,37 +28,37 @@ export ORM_DRIVER ORM_OPTION UMEMPOOL
|
|||
# ----------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
#Running 15s test @ http://localhost:8080/plaintext
|
||||
# 4 threads and 256 connections
|
||||
# Thread Stats Avg Stdev Max +/- Stdev
|
||||
# Latency 1.86ms 2.30ms 28.08ms 88.21%
|
||||
# Req/Sec 552.42k 200.56k 1.39M 68.22%
|
||||
# Latency Distribution
|
||||
# 50% 1.00ms
|
||||
# 75% 2.46ms
|
||||
# 90% 4.53ms
|
||||
# 99% 11.03ms
|
||||
# 30638208 requests in 14.99s, 3.68GB read
|
||||
#Requests/sec: 2044562.05
|
||||
#Transfer/sec: 251.53MB
|
||||
# Thread Stats Avg Stdev Max +/- Stdev
|
||||
# Latency 0.91ms 564.97us 25.85ms 97.24%
|
||||
# Req/Sec 615.24k 52.86k 0.90M 75.81%
|
||||
# Latency Distribution
|
||||
# 50% 0.86ms
|
||||
# 75% 0.95ms
|
||||
# 90% 1.04ms
|
||||
# 99% 1.80ms
|
||||
# 34769232 requests in 15.00s, 4.18GB read
|
||||
#Requests/sec: 2318061.92
|
||||
#Transfer/sec: 285.18MB
|
||||
# ----------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
# JSON
|
||||
# ----------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
#UMEMPOOL="58,0,0,41,273,-15,-14,-20,36"
|
||||
#UMEMPOOL="58,0,0,41,16401,-14,-15,11,25"
|
||||
#sed -i "s|TCP_LINGER_SET .*|TCP_LINGER_SET 0|g" benchmark/FrameworkBenchmarks/fbenchmark.cfg
|
||||
#sed -i "s|LISTEN_BACKLOG .*|LISTEN_BACKLOG 256|g" benchmark/FrameworkBenchmarks/fbenchmark.cfg
|
||||
# ----------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
#Running 15s test @ http://localhost:8080/json
|
||||
# 4 threads and 256 connections
|
||||
# Thread Stats Avg Stdev Max +/- Stdev
|
||||
# Latency 0.90ms 2.52ms 36.05ms 93.49%
|
||||
# Req/Sec 89.35k 47.88k 229.78k 65.55%
|
||||
# Latency 404.71us 577.61us 13.07ms 98.46%
|
||||
# Req/Sec 92.85k 19.62k 174.55k 79.88%
|
||||
# Latency Distribution
|
||||
# 50% 166.00us
|
||||
# 75% 408.00us
|
||||
# 90% 2.27ms
|
||||
# 99% 11.68ms
|
||||
# 4845404 requests in 15.00s, 688.52MB read
|
||||
#Requests/sec: 323059.07
|
||||
#Transfer/sec: 45.91MB
|
||||
# 50% 333.00us
|
||||
# 75% 458.00us
|
||||
# 90% 581.00us
|
||||
# 99% 1.86ms
|
||||
# 5256998 requests in 15.00s, 747.01MB read
|
||||
#Requests/sec: 350480.62
|
||||
#Transfer/sec: 49.80MB
|
||||
# ----------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
# DB
|
||||
# ----------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
"framework": "ulib",
|
||||
"tests": [{
|
||||
"default": {
|
||||
"setup_file": "setup_plaintext",
|
||||
"plaintext_url": "/plaintext",
|
||||
"port": 8080,
|
||||
"approach": "Realistic",
|
||||
|
@ -20,7 +19,6 @@
|
|||
"versus": ""
|
||||
},
|
||||
"plaintext_fit": {
|
||||
"setup_file": "setup_plaintext_fit",
|
||||
"plaintext_url": "/plaintext",
|
||||
"port": 8080,
|
||||
"approach": "Realistic",
|
||||
|
@ -38,7 +36,6 @@
|
|||
"versus": ""
|
||||
},
|
||||
"json": {
|
||||
"setup_file": "setup_json",
|
||||
"json_url": "/json",
|
||||
"port": 8080,
|
||||
"approach": "Realistic",
|
||||
|
@ -56,7 +53,6 @@
|
|||
"versus": ""
|
||||
},
|
||||
"json_fit": {
|
||||
"setup_file": "setup_json_fit",
|
||||
"json_url": "/json",
|
||||
"port": 8080,
|
||||
"approach": "Realistic",
|
||||
|
@ -74,7 +70,6 @@
|
|||
"versus": ""
|
||||
},
|
||||
"mysql": {
|
||||
"setup_file": "setup_mysql",
|
||||
"db_url": "/db",
|
||||
"query_url": "/query?queries=",
|
||||
"fortune_url": "/fortune",
|
||||
|
@ -96,7 +91,6 @@
|
|||
"versus": ""
|
||||
},
|
||||
"postgres": {
|
||||
"setup_file": "setup_postgres",
|
||||
"db_url": "/db",
|
||||
"query_url": "/query?queries=",
|
||||
"fortune_url": "/fortune",
|
||||
|
@ -118,7 +112,6 @@
|
|||
"versus": ""
|
||||
},
|
||||
"postgres_fit": {
|
||||
"setup_file": "setup_postgres_fit",
|
||||
"db_url": "/db",
|
||||
"query_url": "/query?queries=",
|
||||
"fortune_url": "/fortune",
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
FROM ubuntu:18.04
|
||||
|
||||
COPY ./ ./
|
||||
|
||||
RUN apt update -yqq && \
|
||||
apt install -yqq software-properties-common build-essential curl locales wget unzip git \
|
||||
libmysqlclient-dev libpq-dev \
|
||||
libpcre3 libpcre3-dev \
|
||||
libssl-dev libcurl4-openssl-dev \
|
||||
zlib1g-dev \
|
||||
libreadline6-dev \
|
||||
libbz2-dev \
|
||||
libxslt-dev libgdbm-dev ncurses-dev \
|
||||
libffi-dev libtool bison libevent-dev \
|
||||
liborc-0.4-0 \
|
||||
libmcrypt-dev libicu-dev \
|
||||
re2c libnuma-dev \
|
||||
postgresql-server-dev-all libcap2-bin && \
|
||||
add-apt-repository ppa:ubuntu-toolchain-r/test -y && \
|
||||
apt update -yqq && \
|
||||
apt install -yqq gcc-8 g++-8
|
||||
|
||||
RUN locale-gen en_US.UTF-8
|
||||
|
||||
ENV LANG en_US.UTF-8
|
||||
ENV LANGUAGE en_US:en
|
||||
ENV LC_ALL en_US.UTF-8
|
||||
ENV DEBIAN_FRONTEND noninteractive
|
||||
|
||||
ENV CC=gcc-8
|
||||
ENV CXX=g++-8
|
||||
ENV AR=gcc-ar-8
|
||||
ENV RANLIB=gcc-ranlib-8
|
||||
ENV IROOT=/install
|
||||
ENV ULIB_ROOT=$IROOT/ULib
|
||||
ENV ULIB_VERSION=1.4.2
|
||||
ENV ULIB_DOCUMENT_ROOT=$ULIB_ROOT/ULIB_DOCUMENT_ROOT
|
||||
|
||||
WORKDIR $IROOT
|
||||
|
||||
RUN mkdir -p $ULIB_DOCUMENT_ROOT
|
||||
RUN wget -q -O ULib-${ULIB_VERSION}.tar.gz https://github.com/stefanocasazza/ULib/archive/v${ULIB_VERSION}.tar.gz
|
||||
RUN tar xf ULib-${ULIB_VERSION}.tar.gz
|
||||
|
||||
WORKDIR $IROOT/ULib-$ULIB_VERSION
|
||||
|
||||
# AVOID "configure: error: newly created file is older than distributed files! Check your system clock"
|
||||
#RUN cp /src/* src/ulib/net/server/plugin/usp
|
||||
RUN find . -exec touch {} \;
|
||||
|
||||
RUN echo "userver {" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "PORT 8080" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "PREFORK_CHILD $(( 3 * $(nproc) / 2 ))" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "TCP_LINGER_SET 0" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "LISTEN_BACKLOG 256" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "DOCUMENT_ROOT $ULIB_DOCUMENT_ROOT " >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "}" >> $ULIB_ROOT/benchmark.cfg
|
||||
|
||||
RUN USP_FLAGS="-DAS_cpoll_cppsp_DO" \
|
||||
./configure --prefix=$ULIB_ROOT \
|
||||
--disable-static --disable-examples \
|
||||
--without-ssl --disable-HCRS --without-pcre --without-expat \
|
||||
--without-libz --without-libuuid --disable-HPRS --without-magic --without-libares \
|
||||
--enable-static-server-plugin=http
|
||||
|
||||
RUN make install && \
|
||||
cd examples/userver && make install && \
|
||||
cd ../../src/ulib/net/server/plugin/usp && \
|
||||
make json.la && \
|
||||
cp .libs/json.so $ULIB_DOCUMENT_ROOT
|
||||
|
||||
ENV PATH=${ULIB_ROOT}/bin:${PATH}
|
||||
|
||||
ADD ./ /ulib
|
||||
WORKDIR /ulib
|
||||
|
||||
ENV UMEMPOOL="58,0,0,41,273,-15,-14,-20,36"
|
||||
|
||||
CMD setcap cap_sys_nice,cap_sys_resource,cap_net_bind_service,cap_net_raw+eip $IROOT/ULib/bin/userver_tcp && \
|
||||
$IROOT/ULib/bin/userver_tcp -c $IROOT/ULib/benchmark.cfg
|
|
@ -0,0 +1,80 @@
|
|||
FROM ubuntu:18.04
|
||||
|
||||
COPY ./ ./
|
||||
|
||||
RUN apt update -yqq && \
|
||||
apt install -yqq software-properties-common build-essential curl locales wget unzip git \
|
||||
libmysqlclient-dev libpq-dev \
|
||||
libpcre3 libpcre3-dev \
|
||||
libssl-dev libcurl4-openssl-dev \
|
||||
zlib1g-dev \
|
||||
libreadline6-dev \
|
||||
libbz2-dev \
|
||||
libxslt-dev libgdbm-dev ncurses-dev \
|
||||
libffi-dev libtool bison libevent-dev \
|
||||
liborc-0.4-0 \
|
||||
libmcrypt-dev libicu-dev \
|
||||
re2c libnuma-dev \
|
||||
postgresql-server-dev-all libcap2-bin && \
|
||||
add-apt-repository ppa:ubuntu-toolchain-r/test -y && \
|
||||
apt update -yqq && \
|
||||
apt install -yqq gcc-8 g++-8
|
||||
|
||||
RUN locale-gen en_US.UTF-8
|
||||
|
||||
ENV LANG en_US.UTF-8
|
||||
ENV LANGUAGE en_US:en
|
||||
ENV LC_ALL en_US.UTF-8
|
||||
ENV DEBIAN_FRONTEND noninteractive
|
||||
|
||||
ENV CC=gcc-8
|
||||
ENV CXX=g++-8
|
||||
ENV AR=gcc-ar-8
|
||||
ENV RANLIB=gcc-ranlib-8
|
||||
ENV IROOT=/install
|
||||
ENV ULIB_ROOT=$IROOT/ULib
|
||||
ENV ULIB_VERSION=1.4.2
|
||||
ENV ULIB_DOCUMENT_ROOT=$ULIB_ROOT/ULIB_DOCUMENT_ROOT
|
||||
|
||||
WORKDIR $IROOT
|
||||
|
||||
RUN mkdir -p $ULIB_DOCUMENT_ROOT
|
||||
RUN wget -q -O ULib-${ULIB_VERSION}.tar.gz https://github.com/stefanocasazza/ULib/archive/v${ULIB_VERSION}.tar.gz
|
||||
RUN tar xf ULib-${ULIB_VERSION}.tar.gz
|
||||
|
||||
WORKDIR $IROOT/ULib-$ULIB_VERSION
|
||||
|
||||
# AVOID "configure: error: newly created file is older than distributed files! Check your system clock"
|
||||
#RUN cp /src/* src/ulib/net/server/plugin/usp
|
||||
RUN find . -exec touch {} \;
|
||||
|
||||
RUN echo "userver {" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "PORT 8080" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "PREFORK_CHILD $(nproc)" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "TCP_LINGER_SET 0" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "LISTEN_BACKLOG 256" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "DOCUMENT_ROOT $ULIB_DOCUMENT_ROOT " >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "}" >> $ULIB_ROOT/benchmark.cfg
|
||||
|
||||
RUN USP_FLAGS="-DAS_cpoll_cppsp_DO" \
|
||||
./configure --prefix=$ULIB_ROOT \
|
||||
--disable-static --disable-examples \
|
||||
--without-ssl --disable-HCRS --without-pcre --without-expat \
|
||||
--without-libz --without-libuuid --disable-HPRS --without-magic --without-libares \
|
||||
--enable-static-server-plugin=http
|
||||
|
||||
RUN make install && \
|
||||
cd examples/userver && make install && \
|
||||
cd ../../src/ulib/net/server/plugin/usp && \
|
||||
make json.la && \
|
||||
cp .libs/json.so $ULIB_DOCUMENT_ROOT
|
||||
|
||||
ENV PATH=${ULIB_ROOT}/bin:${PATH}
|
||||
|
||||
ADD ./ /ulib
|
||||
WORKDIR /ulib
|
||||
|
||||
ENV UMEMPOOL="58,0,0,41,273,-15,-14,-20,36"
|
||||
|
||||
CMD setcap cap_sys_nice,cap_sys_resource,cap_net_bind_service,cap_net_raw+eip $IROOT/ULib/bin/userver_tcp && \
|
||||
$IROOT/ULib/bin/userver_tcp -c $IROOT/ULib/benchmark.cfg
|
|
@ -0,0 +1,88 @@
|
|||
FROM ubuntu:18.04
|
||||
|
||||
COPY ./ ./
|
||||
|
||||
RUN apt update -yqq && \
|
||||
apt install -yqq software-properties-common build-essential curl locales wget unzip git \
|
||||
libmysqlclient-dev libpq-dev \
|
||||
libpcre3 libpcre3-dev \
|
||||
libssl-dev libcurl4-openssl-dev \
|
||||
zlib1g-dev \
|
||||
libreadline6-dev \
|
||||
libbz2-dev \
|
||||
libxslt-dev libgdbm-dev ncurses-dev \
|
||||
libffi-dev libtool bison libevent-dev \
|
||||
liborc-0.4-0 \
|
||||
libmcrypt-dev libicu-dev \
|
||||
re2c libnuma-dev \
|
||||
postgresql-server-dev-all libcap2-bin && \
|
||||
add-apt-repository ppa:ubuntu-toolchain-r/test -y && \
|
||||
apt update -yqq && \
|
||||
apt install -yqq gcc-8 g++-8
|
||||
|
||||
RUN locale-gen en_US.UTF-8
|
||||
|
||||
ENV LANG en_US.UTF-8
|
||||
ENV LANGUAGE en_US:en
|
||||
ENV LC_ALL en_US.UTF-8
|
||||
ENV DEBIAN_FRONTEND noninteractive
|
||||
|
||||
ENV CC=gcc-8
|
||||
ENV CXX=g++-8
|
||||
ENV AR=gcc-ar-8
|
||||
ENV RANLIB=gcc-ranlib-8
|
||||
ENV IROOT=/install
|
||||
ENV ULIB_ROOT=$IROOT/ULib
|
||||
ENV ULIB_VERSION=1.4.2
|
||||
ENV ULIB_DOCUMENT_ROOT=$ULIB_ROOT/ULIB_DOCUMENT_ROOT
|
||||
|
||||
WORKDIR $IROOT
|
||||
|
||||
RUN wget -q https://github.com/mongodb/mongo-c-driver/releases/download/1.4.0/mongo-c-driver-1.4.0.tar.gz
|
||||
RUN tar xf mongo-c-driver-1.4.0.tar.gz
|
||||
RUN cd mongo-c-driver-1.4.0/ && \
|
||||
./configure --prefix=${IROOT} --libdir=${IROOT} --disable-automatic-init-and-cleanup && \
|
||||
make && make install
|
||||
|
||||
RUN mkdir -p $ULIB_DOCUMENT_ROOT
|
||||
RUN wget -q -O ULib-${ULIB_VERSION}.tar.gz https://github.com/stefanocasazza/ULib/archive/v${ULIB_VERSION}.tar.gz
|
||||
RUN tar xf ULib-${ULIB_VERSION}.tar.gz
|
||||
|
||||
WORKDIR $IROOT/ULib-$ULIB_VERSION
|
||||
|
||||
# AVOID "configure: error: newly created file is older than distributed files! Check your system clock"
|
||||
#RUN cp /src/* src/ulib/net/server/plugin/usp
|
||||
RUN find . -exec touch {} \;
|
||||
|
||||
RUN echo "userver {" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "PORT 8080" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "PREFORK_CHILD $(( 3 * $(nproc) / 2 ))" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "TCP_LINGER_SET -2" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "LISTEN_BACKLOG 256" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "DOCUMENT_ROOT $ULIB_DOCUMENT_ROOT " >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "}" >> $ULIB_ROOT/benchmark.cfg
|
||||
|
||||
RUN USP_FLAGS="-DAS_cpoll_cppsp_DO" \
|
||||
./configure --prefix=$ULIB_ROOT \
|
||||
--disable-static --disable-examples \
|
||||
--without-ssl --disable-HCRS --without-pcre --without-expat \
|
||||
--without-libz --without-libuuid --disable-HPRS --without-magic --without-libares \
|
||||
--enable-static-server-plugin=http \
|
||||
--with-mongodb --with-mongodb-includes="-I$IROOT/include/libbson-1.0 -I$IROOT/include/libmongoc-1.0" --with-mongodb-ldflags="-L$IROOT"
|
||||
|
||||
RUN make install && \
|
||||
cd examples/userver && make install && \
|
||||
cd ../../src/ulib/net/server/plugin/usp && \
|
||||
make mdb.la mquery.la mupdate.la mfortune.la && \
|
||||
cp .libs/mdb.so .libs/mquery.so .libs/mupdate.so .libs/mfortune.so $ULIB_DOCUMENT_ROOT
|
||||
|
||||
ENV PATH=${ULIB_ROOT}/bin:${PATH}
|
||||
|
||||
ADD ./ /ulib
|
||||
WORKDIR /ulib
|
||||
|
||||
ENV MONGODB_HOST=tfb-database
|
||||
ENV UMEMPOOL="96,0,0,47,16401,-14,-20,-18,26"
|
||||
|
||||
CMD setcap cap_sys_nice,cap_sys_resource,cap_net_bind_service,cap_net_raw+eip $IROOT/ULib/bin/userver_tcp && \
|
||||
$IROOT/ULib/bin/userver_tcp -c $IROOT/ULib/benchmark.cfg
|
|
@ -0,0 +1,84 @@
|
|||
FROM ubuntu:18.04
|
||||
|
||||
COPY ./ ./
|
||||
|
||||
RUN apt update -yqq && \
|
||||
apt install -yqq software-properties-common build-essential curl locales wget unzip git \
|
||||
libmysqlclient-dev libpq-dev \
|
||||
libpcre3 libpcre3-dev \
|
||||
libssl-dev libcurl4-openssl-dev \
|
||||
zlib1g-dev \
|
||||
libreadline6-dev \
|
||||
libbz2-dev \
|
||||
libxslt-dev libgdbm-dev ncurses-dev \
|
||||
libffi-dev libtool bison libevent-dev \
|
||||
liborc-0.4-0 \
|
||||
libmcrypt-dev libicu-dev \
|
||||
re2c libnuma-dev \
|
||||
postgresql-server-dev-all libcap2-bin && \
|
||||
add-apt-repository ppa:ubuntu-toolchain-r/test -y && \
|
||||
apt update -yqq && \
|
||||
apt install -yqq gcc-8 g++-8
|
||||
|
||||
RUN locale-gen en_US.UTF-8
|
||||
|
||||
ENV LANG en_US.UTF-8
|
||||
ENV LANGUAGE en_US:en
|
||||
ENV LC_ALL en_US.UTF-8
|
||||
ENV DEBIAN_FRONTEND noninteractive
|
||||
|
||||
ENV CC=gcc-8
|
||||
ENV CXX=g++-8
|
||||
ENV AR=gcc-ar-8
|
||||
ENV RANLIB=gcc-ranlib-8
|
||||
ENV IROOT=/install
|
||||
ENV ULIB_ROOT=$IROOT/ULib
|
||||
ENV ULIB_VERSION=1.4.2
|
||||
ENV ULIB_DOCUMENT_ROOT=$ULIB_ROOT/ULIB_DOCUMENT_ROOT
|
||||
|
||||
WORKDIR $IROOT
|
||||
|
||||
RUN mkdir -p $ULIB_DOCUMENT_ROOT
|
||||
RUN wget -q -O ULib-${ULIB_VERSION}.tar.gz https://github.com/stefanocasazza/ULib/archive/v${ULIB_VERSION}.tar.gz
|
||||
RUN tar xf ULib-${ULIB_VERSION}.tar.gz
|
||||
|
||||
WORKDIR $IROOT/ULib-$ULIB_VERSION
|
||||
|
||||
# AVOID "configure: error: newly created file is older than distributed files! Check your system clock"
|
||||
#RUN cp /src/* src/ulib/net/server/plugin/usp
|
||||
RUN find . -exec touch {} \;
|
||||
|
||||
RUN echo "userver {" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "PORT 8080" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "PREFORK_CHILD $(nproc)" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "TCP_LINGER_SET -2" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "LISTEN_BACKLOG 256" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "ORM_DRIVER mysql" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "DOCUMENT_ROOT $ULIB_DOCUMENT_ROOT " >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "}" >> $ULIB_ROOT/benchmark.cfg
|
||||
|
||||
RUN USP_FLAGS="-DAS_cpoll_cppsp_DO" \
|
||||
./configure --prefix=$ULIB_ROOT \
|
||||
--with-mysql \
|
||||
--disable-static --disable-examples \
|
||||
--without-ssl --disable-HCRS --without-pcre --without-expat \
|
||||
--without-libz --without-libuuid --disable-HPRS --without-magic --without-libares \
|
||||
--enable-static-orm-driver='mysql' --enable-static-server-plugin=http
|
||||
|
||||
RUN make install && \
|
||||
cd examples/userver && make install && \
|
||||
cd ../../src/ulib/net/server/plugin/usp && \
|
||||
make db.la query.la update.la fortune.la cached_worlds.la && \
|
||||
cp .libs/db.so .libs/query.so .libs/update.so .libs/fortune.so .libs/cached_worlds.so $ULIB_DOCUMENT_ROOT
|
||||
|
||||
ENV PATH=${ULIB_ROOT}/bin:${PATH}
|
||||
|
||||
ADD ./ /ulib
|
||||
WORKDIR /ulib
|
||||
|
||||
ENV ORM_DRIVER="mysql"
|
||||
ENV ORM_OPTION="host=tfb-database user=benchmarkdbuser password=benchmarkdbpass character-set=utf8 dbname=hello_world"
|
||||
ENV UMEMPOOL="581,0,0,59,16409,-7,-20,-23,31"
|
||||
|
||||
CMD setcap cap_sys_nice,cap_sys_resource,cap_net_bind_service,cap_net_raw+eip $IROOT/ULib/bin/userver_tcp && \
|
||||
$IROOT/ULib/bin/userver_tcp -c $IROOT/ULib/benchmark.cfg
|
|
@ -0,0 +1,80 @@
|
|||
FROM ubuntu:18.04
|
||||
|
||||
COPY ./ ./
|
||||
|
||||
RUN apt update -yqq && \
|
||||
apt install -yqq software-properties-common build-essential curl locales wget unzip git \
|
||||
libmysqlclient-dev libpq-dev \
|
||||
libpcre3 libpcre3-dev \
|
||||
libssl-dev libcurl4-openssl-dev \
|
||||
zlib1g-dev \
|
||||
libreadline6-dev \
|
||||
libbz2-dev \
|
||||
libxslt-dev libgdbm-dev ncurses-dev \
|
||||
libffi-dev libtool bison libevent-dev \
|
||||
liborc-0.4-0 \
|
||||
libmcrypt-dev libicu-dev \
|
||||
re2c libnuma-dev \
|
||||
postgresql-server-dev-all libcap2-bin && \
|
||||
add-apt-repository ppa:ubuntu-toolchain-r/test -y && \
|
||||
apt update -yqq && \
|
||||
apt install -yqq gcc-8 g++-8
|
||||
|
||||
RUN locale-gen en_US.UTF-8
|
||||
|
||||
ENV LANG en_US.UTF-8
|
||||
ENV LANGUAGE en_US:en
|
||||
ENV LC_ALL en_US.UTF-8
|
||||
ENV DEBIAN_FRONTEND noninteractive
|
||||
|
||||
ENV CC=gcc-8
|
||||
ENV CXX=g++-8
|
||||
ENV AR=gcc-ar-8
|
||||
ENV RANLIB=gcc-ranlib-8
|
||||
ENV IROOT=/install
|
||||
ENV ULIB_ROOT=$IROOT/ULib
|
||||
ENV ULIB_VERSION=1.4.2
|
||||
ENV ULIB_DOCUMENT_ROOT=$ULIB_ROOT/ULIB_DOCUMENT_ROOT
|
||||
|
||||
WORKDIR $IROOT
|
||||
|
||||
RUN mkdir -p $ULIB_DOCUMENT_ROOT
|
||||
RUN wget -q -O ULib-${ULIB_VERSION}.tar.gz https://github.com/stefanocasazza/ULib/archive/v${ULIB_VERSION}.tar.gz
|
||||
RUN tar xf ULib-${ULIB_VERSION}.tar.gz
|
||||
|
||||
WORKDIR $IROOT/ULib-$ULIB_VERSION
|
||||
|
||||
# AVOID "configure: error: newly created file is older than distributed files! Check your system clock"
|
||||
#RUN cp /src/* src/ulib/net/server/plugin/usp
|
||||
RUN find . -exec touch {} \;
|
||||
|
||||
RUN echo "userver {" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "PORT 8080" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "PREFORK_CHILD $(nproc)" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "TCP_LINGER_SET 0" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "LISTEN_BACKLOG 16384" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "DOCUMENT_ROOT $ULIB_DOCUMENT_ROOT " >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "}" >> $ULIB_ROOT/benchmark.cfg
|
||||
|
||||
RUN USP_FLAGS="-DAS_cpoll_cppsp_DO" \
|
||||
./configure --prefix=$ULIB_ROOT \
|
||||
--disable-static --disable-examples \
|
||||
--without-ssl --without-pcre --without-expat \
|
||||
--without-libz --without-libuuid --without-magic --without-libares \
|
||||
--enable-static-server-plugin=http
|
||||
|
||||
RUN make install && \
|
||||
cd examples/userver && make install && \
|
||||
cd ../../src/ulib/net/server/plugin/usp && \
|
||||
make plaintext.la && \
|
||||
cp .libs/plaintext.so $ULIB_DOCUMENT_ROOT
|
||||
|
||||
ENV PATH=${ULIB_ROOT}/bin:${PATH}
|
||||
|
||||
ADD ./ /ulib
|
||||
WORKDIR /ulib
|
||||
|
||||
ENV UMEMPOOL="58,0,0,41,16401,-14,-15,11,25"
|
||||
|
||||
CMD setcap cap_sys_nice,cap_sys_resource,cap_net_bind_service,cap_net_raw+eip $IROOT/ULib/bin/userver_tcp && \
|
||||
$IROOT/ULib/bin/userver_tcp -c $IROOT/ULib/benchmark.cfg
|
|
@ -0,0 +1,84 @@
|
|||
FROM ubuntu:18.04
|
||||
|
||||
COPY ./ ./
|
||||
|
||||
RUN apt update -yqq && \
|
||||
apt install -yqq software-properties-common build-essential curl locales wget unzip git \
|
||||
libmysqlclient-dev libpq-dev \
|
||||
libpcre3 libpcre3-dev \
|
||||
libssl-dev libcurl4-openssl-dev \
|
||||
zlib1g-dev \
|
||||
libreadline6-dev \
|
||||
libbz2-dev \
|
||||
libxslt-dev libgdbm-dev ncurses-dev \
|
||||
libffi-dev libtool bison libevent-dev \
|
||||
liborc-0.4-0 \
|
||||
libmcrypt-dev libicu-dev \
|
||||
re2c libnuma-dev \
|
||||
postgresql-server-dev-all libcap2-bin && \
|
||||
add-apt-repository ppa:ubuntu-toolchain-r/test -y && \
|
||||
apt update -yqq && \
|
||||
apt install -yqq gcc-8 g++-8
|
||||
|
||||
RUN locale-gen en_US.UTF-8
|
||||
|
||||
ENV LANG en_US.UTF-8
|
||||
ENV LANGUAGE en_US:en
|
||||
ENV LC_ALL en_US.UTF-8
|
||||
ENV DEBIAN_FRONTEND noninteractive
|
||||
|
||||
ENV CC=gcc-8
|
||||
ENV CXX=g++-8
|
||||
ENV AR=gcc-ar-8
|
||||
ENV RANLIB=gcc-ranlib-8
|
||||
ENV IROOT=/install
|
||||
ENV ULIB_ROOT=$IROOT/ULib
|
||||
ENV ULIB_VERSION=1.4.2
|
||||
ENV ULIB_DOCUMENT_ROOT=$ULIB_ROOT/ULIB_DOCUMENT_ROOT
|
||||
|
||||
WORKDIR $IROOT
|
||||
|
||||
RUN mkdir -p $ULIB_DOCUMENT_ROOT
|
||||
RUN wget -q -O ULib-${ULIB_VERSION}.tar.gz https://github.com/stefanocasazza/ULib/archive/v${ULIB_VERSION}.tar.gz
|
||||
RUN tar xf ULib-${ULIB_VERSION}.tar.gz
|
||||
|
||||
WORKDIR $IROOT/ULib-$ULIB_VERSION
|
||||
|
||||
# AVOID "configure: error: newly created file is older than distributed files! Check your system clock"
|
||||
#RUN cp /src/* src/ulib/net/server/plugin/usp
|
||||
RUN find . -exec touch {} \;
|
||||
|
||||
RUN echo "userver {" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "PORT 8080" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "PREFORK_CHILD $(( 2 * $(nproc)))" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "TCP_LINGER_SET -2" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "LISTEN_BACKLOG 256" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "ORM_DRIVER pgsql" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "DOCUMENT_ROOT $ULIB_DOCUMENT_ROOT " >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "}" >> $ULIB_ROOT/benchmark.cfg
|
||||
|
||||
RUN USP_FLAGS="-DAS_cpoll_cppsp_DO" \
|
||||
./configure --prefix=$ULIB_ROOT \
|
||||
--disable-static --disable-examples \
|
||||
--with-pgsql \
|
||||
--without-ssl --disable-HCRS --without-pcre --without-expat \
|
||||
--without-libz --without-libuuid --disable-HPRS --without-magic --without-libares \
|
||||
--enable-static-orm-driver='pgsql' --enable-static-server-plugin=http
|
||||
|
||||
RUN make install && \
|
||||
cd examples/userver && make install && \
|
||||
cd ../../src/ulib/net/server/plugin/usp && \
|
||||
make db.la query.la update.la fortune.la cached_worlds.la && \
|
||||
cp .libs/db.so .libs/query.so .libs/update.so .libs/fortune.so .libs/cached_worlds.so $ULIB_DOCUMENT_ROOT
|
||||
|
||||
ENV PATH=${ULIB_ROOT}/bin:${PATH}
|
||||
|
||||
ADD ./ /ulib
|
||||
WORKDIR /ulib
|
||||
|
||||
ENV ORM_DRIVER="pgsql"
|
||||
ENV UMEMPOOL="581,0,0,59,16409,-7,-20,-23,31"
|
||||
ENV ORM_OPTION="host=tfb-database user=benchmarkdbuser password=benchmarkdbpass dbname=hello_world client_encoding=UTF8"
|
||||
|
||||
CMD setcap cap_sys_nice,cap_sys_resource,cap_net_bind_service,cap_net_raw+eip $IROOT/ULib/bin/userver_tcp && \
|
||||
$IROOT/ULib/bin/userver_tcp -c $IROOT/ULib/benchmark.cfg
|
|
@ -0,0 +1,84 @@
|
|||
FROM ubuntu:18.04
|
||||
|
||||
COPY ./ ./
|
||||
|
||||
RUN apt update -yqq && \
|
||||
apt install -yqq software-properties-common build-essential curl locales wget unzip git \
|
||||
libmysqlclient-dev libpq-dev \
|
||||
libpcre3 libpcre3-dev \
|
||||
libssl-dev libcurl4-openssl-dev \
|
||||
zlib1g-dev \
|
||||
libreadline6-dev \
|
||||
libbz2-dev \
|
||||
libxslt-dev libgdbm-dev ncurses-dev \
|
||||
libffi-dev libtool bison libevent-dev \
|
||||
liborc-0.4-0 \
|
||||
libmcrypt-dev libicu-dev \
|
||||
re2c libnuma-dev \
|
||||
postgresql-server-dev-all libcap2-bin && \
|
||||
add-apt-repository ppa:ubuntu-toolchain-r/test -y && \
|
||||
apt update -yqq && \
|
||||
apt install -yqq gcc-8 g++-8
|
||||
|
||||
RUN locale-gen en_US.UTF-8
|
||||
|
||||
ENV LANG en_US.UTF-8
|
||||
ENV LANGUAGE en_US:en
|
||||
ENV LC_ALL en_US.UTF-8
|
||||
ENV DEBIAN_FRONTEND noninteractive
|
||||
|
||||
ENV CC=gcc-8
|
||||
ENV CXX=g++-8
|
||||
ENV AR=gcc-ar-8
|
||||
ENV RANLIB=gcc-ranlib-8
|
||||
ENV IROOT=/install
|
||||
ENV ULIB_ROOT=$IROOT/ULib
|
||||
ENV ULIB_VERSION=1.4.2
|
||||
ENV ULIB_DOCUMENT_ROOT=$ULIB_ROOT/ULIB_DOCUMENT_ROOT
|
||||
|
||||
WORKDIR $IROOT
|
||||
|
||||
RUN mkdir -p $ULIB_DOCUMENT_ROOT
|
||||
RUN wget -q -O ULib-${ULIB_VERSION}.tar.gz https://github.com/stefanocasazza/ULib/archive/v${ULIB_VERSION}.tar.gz
|
||||
RUN tar xf ULib-${ULIB_VERSION}.tar.gz
|
||||
|
||||
WORKDIR $IROOT/ULib-$ULIB_VERSION
|
||||
|
||||
# AVOID "configure: error: newly created file is older than distributed files! Check your system clock"
|
||||
#RUN cp /src/* src/ulib/net/server/plugin/usp
|
||||
RUN find . -exec touch {} \;
|
||||
|
||||
RUN echo "userver {" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "PORT 8080" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "PREFORK_CHILD $(nproc)" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "TCP_LINGER_SET -2" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "LISTEN_BACKLOG 256" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "ORM_DRIVER pgsql" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "DOCUMENT_ROOT $ULIB_DOCUMENT_ROOT " >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "}" >> $ULIB_ROOT/benchmark.cfg
|
||||
|
||||
RUN USP_FLAGS="-DAS_cpoll_cppsp_DO" \
|
||||
./configure --prefix=$ULIB_ROOT \
|
||||
--disable-static --disable-examples \
|
||||
--with-pgsql \
|
||||
--without-ssl --disable-HCRS --without-pcre --without-expat \
|
||||
--without-libz --without-libuuid --disable-HPRS --without-magic --without-libares \
|
||||
--enable-static-orm-driver='pgsql' --enable-static-server-plugin=http
|
||||
|
||||
RUN make install && \
|
||||
cd examples/userver && make install && \
|
||||
cd ../../src/ulib/net/server/plugin/usp && \
|
||||
make db.la query.la update.la fortune.la cached_worlds.la && \
|
||||
cp .libs/db.so .libs/query.so .libs/update.so .libs/fortune.so .libs/cached_worlds.so $ULIB_DOCUMENT_ROOT
|
||||
|
||||
ENV PATH=${ULIB_ROOT}/bin:${PATH}
|
||||
|
||||
ADD ./ /ulib
|
||||
WORKDIR /ulib
|
||||
|
||||
ENV ORM_DRIVER="pgsql"
|
||||
ENV UMEMPOOL="581,0,0,59,16409,-7,-20,-23,31"
|
||||
ENV ORM_OPTION="host=tfb-database user=benchmarkdbuser password=benchmarkdbpass dbname=hello_world client_encoding=UTF8"
|
||||
|
||||
CMD setcap cap_sys_nice,cap_sys_resource,cap_net_bind_service,cap_net_raw+eip $IROOT/ULib/bin/userver_tcp && \
|
||||
$IROOT/ULib/bin/userver_tcp -c $IROOT/ULib/benchmark.cfg
|
|
@ -0,0 +1,80 @@
|
|||
FROM ubuntu:18.04
|
||||
|
||||
COPY ./ ./
|
||||
|
||||
RUN apt update -yqq && \
|
||||
apt install -yqq software-properties-common build-essential curl locales wget unzip git \
|
||||
libmysqlclient-dev libpq-dev \
|
||||
libpcre3 libpcre3-dev \
|
||||
libssl-dev libcurl4-openssl-dev \
|
||||
zlib1g-dev \
|
||||
libreadline6-dev \
|
||||
libbz2-dev \
|
||||
libxslt-dev libgdbm-dev ncurses-dev \
|
||||
libffi-dev libtool bison libevent-dev \
|
||||
liborc-0.4-0 \
|
||||
libmcrypt-dev libicu-dev \
|
||||
re2c libnuma-dev \
|
||||
postgresql-server-dev-all libcap2-bin && \
|
||||
add-apt-repository ppa:ubuntu-toolchain-r/test -y && \
|
||||
apt update -yqq && \
|
||||
apt install -yqq gcc-8 g++-8
|
||||
|
||||
RUN locale-gen en_US.UTF-8
|
||||
|
||||
ENV LANG en_US.UTF-8
|
||||
ENV LANGUAGE en_US:en
|
||||
ENV LC_ALL en_US.UTF-8
|
||||
ENV DEBIAN_FRONTEND noninteractive
|
||||
|
||||
ENV CC=gcc-8
|
||||
ENV CXX=g++-8
|
||||
ENV AR=gcc-ar-8
|
||||
ENV RANLIB=gcc-ranlib-8
|
||||
ENV IROOT=/install
|
||||
ENV ULIB_ROOT=$IROOT/ULib
|
||||
ENV ULIB_VERSION=1.4.2
|
||||
ENV ULIB_DOCUMENT_ROOT=$ULIB_ROOT/ULIB_DOCUMENT_ROOT
|
||||
|
||||
WORKDIR $IROOT
|
||||
|
||||
RUN mkdir -p $ULIB_DOCUMENT_ROOT
|
||||
RUN wget -q -O ULib-${ULIB_VERSION}.tar.gz https://github.com/stefanocasazza/ULib/archive/v${ULIB_VERSION}.tar.gz
|
||||
RUN tar xf ULib-${ULIB_VERSION}.tar.gz
|
||||
|
||||
WORKDIR $IROOT/ULib-$ULIB_VERSION
|
||||
|
||||
# AVOID "configure: error: newly created file is older than distributed files! Check your system clock"
|
||||
#RUN cp /src/* src/ulib/net/server/plugin/usp
|
||||
RUN find . -exec touch {} \;
|
||||
|
||||
RUN echo "userver {" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "PORT 8080" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "PREFORK_CHILD $(( 3 * $(nproc) / 2 ))" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "TCP_LINGER_SET 0" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "LISTEN_BACKLOG 16384" >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "DOCUMENT_ROOT $ULIB_DOCUMENT_ROOT " >> $ULIB_ROOT/benchmark.cfg
|
||||
RUN echo "}" >> $ULIB_ROOT/benchmark.cfg
|
||||
|
||||
RUN USP_FLAGS="-DAS_cpoll_cppsp_DO" \
|
||||
./configure --prefix=$ULIB_ROOT \
|
||||
--disable-static --disable-examples \
|
||||
--without-ssl --without-pcre --without-expat \
|
||||
--without-libz --without-libuuid --without-magic --without-libares \
|
||||
--enable-static-server-plugin=http
|
||||
|
||||
RUN make install && \
|
||||
cd examples/userver && make install && \
|
||||
cd ../../src/ulib/net/server/plugin/usp && \
|
||||
make plaintext.la && \
|
||||
cp .libs/plaintext.so $ULIB_DOCUMENT_ROOT
|
||||
|
||||
ENV PATH=${ULIB_ROOT}/bin:${PATH}
|
||||
|
||||
ADD ./ /ulib
|
||||
WORKDIR /ulib
|
||||
|
||||
ENV UMEMPOOL="58,0,0,41,16401,-14,-15,11,25"
|
||||
|
||||
CMD setcap cap_sys_nice,cap_sys_resource,cap_net_bind_service,cap_net_raw+eip $IROOT/ULib/bin/userver_tcp && \
|
||||
$IROOT/ULib/bin/userver_tcp -c $IROOT/ULib/benchmark.cfg
|
|
@ -13,7 +13,7 @@ rm -f /tmp/uclient.log \
|
|||
trace.*userver_*.[0-9]* object.*userver_*.[0-9]* stack.*userver_*.[0-9]* mempool.*userver_*.[0-9]* \
|
||||
$DOC_ROOT/trace.*userver_*.[0-9]* $DOC_ROOT/object.*userver_*.[0-9]* $DOC_ROOT/stack.*userver_*.[0-9]* $DOC_ROOT/mempool.*userver_*.[0-9]*
|
||||
|
||||
#UTRACE="0 100M -1"
|
||||
UTRACE="0 100M -1"
|
||||
UTRACE_FOLDER=/tmp
|
||||
TMPDIR=/tmp
|
||||
#UOBJDUMP="0 10M 100"
|
||||
|
@ -62,7 +62,7 @@ nodog {
|
|||
FW_CMD ../firewall/nodog.fw
|
||||
DECRYPT_KEY vivalatopa
|
||||
CHECK_EXPIRE_INTERVAL 60
|
||||
FW_ENV "MasqueradeDevice=eth0 'AuthServiceAddr=http://localhost' FullPrivateNetwork=192.168.0.0/12 LocalNetwork=192.168.0.0/24 InternalDevice=wlan0 'ExternalDevice=eth0 tun0 tun2'"
|
||||
FW_ENV "MasqueradeDevice=eth0 'AuthServiceAddr=http://localhost' FullPrivateNetwork=192.168.0.0/12 LocalNetwork=192.168.0.0/16 InternalDevice=usb0 'ExternalDevice=eth0 tun0 tun2'"
|
||||
LOCAL_NETWORK_LABEL 1000
|
||||
#DHCP_DATA_FILE /tmp/kea-leases.tdb
|
||||
}
|
||||
|
@ -84,6 +84,8 @@ wait_server_ready localhost 5280
|
|||
sync
|
||||
echo "PID = `cat /tmp/nodog.pid`"
|
||||
|
||||
#netcat -w 10 192.168.42.129 5280 < /mnt/storage/srv/realtime.req
|
||||
|
||||
#$SLEEP
|
||||
#kill_prg userver_tcp TERM
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ rm -f out/userver_tcp.out err/wi-auth2.err err/uclient.err \
|
|||
trace.*userver_*.[0-9]* object.*userver_*.[0-9]* stack.*userver_*.[0-9]* mempool.*userver_*.[0-9]* \
|
||||
$DOC_ROOT/trace.*userver_*.[0-9]* $DOC_ROOT/object.*userver_*.[0-9]* $DOC_ROOT/stack.*userver_*.[0-9]* $DOC_ROOT/mempool.*userver_*.[0-9]*
|
||||
|
||||
UTRACE="0 100M -1"
|
||||
#UTRACE="0 100M -1"
|
||||
UTRACE_FOLDER=/tmp
|
||||
TMPDIR=/tmp
|
||||
#UOBJDUMP="0 10M 100"
|
||||
|
|
|
@ -584,14 +584,15 @@ int U_EXPORT main(int argc, char* argv[], char* env[])
|
|||
fb.IndirectUInt(INT_MAX);
|
||||
fb.IndirectUInt(UINT_MAX);
|
||||
fb.IndirectFloat(3.5);
|
||||
fb.StringNull();
|
||||
});
|
||||
|
||||
U_INTERNAL_ASSERT_EQUALS(size, 607)
|
||||
// U_INTERNAL_ASSERT_EQUALS(size, 607)
|
||||
|
||||
fb.setRoot();
|
||||
fb.AsVector(vec);
|
||||
|
||||
U_ASSERT_EQUALS(vec.GetSize(), 36)
|
||||
U_ASSERT_EQUALS(vec.GetSize(), 37)
|
||||
U_ASSERT_EQUALS(vec.AsVectorGet<uint64_t>(0), 1)
|
||||
U_ASSERT_EQUALS(vec.AsVectorGet<int64_t>(1), INT_MIN)
|
||||
U_ASSERT_EQUALS(vec.AsVectorGet<uint64_t>(2), 2)
|
||||
|
@ -709,6 +710,7 @@ int U_EXPORT main(int argc, char* argv[], char* env[])
|
|||
U_ASSERT_EQUALS(vec.AsVectorGetIndirect<uint64_t>(33), INT_MAX)
|
||||
U_ASSERT_EQUALS(vec.AsVectorGetIndirect<uint64_t>(34), UINT_MAX)
|
||||
U_ASSERT_EQUALS(vec.AsVectorGetIndirect<double>(35), 3.5)
|
||||
U_ASSERT_EQUALS(vec.AsVectorGet<UString>(36), UString::getStringNull())
|
||||
|
||||
size = fb.encodeMap([&]() {
|
||||
fb.UInt(U_CONSTANT_TO_PARAM("a"), 1);
|
||||
|
|
|
@ -156,7 +156,7 @@ static void TCPEchoServer(unsigned int iPortNumber, bool bIPv6)
|
|||
cout << "Host name = " << cServerSocket.localIPAddress().getHostName() << '\n'
|
||||
<< "Host address = " << cServerSocket.localIPAddress().getAddressString() << '\n'
|
||||
<< "Node name = " << USocketExt::getNodeName() << '\n'
|
||||
<< "MAC address = " << pcClientSocket->getMacAddress("eth0") << '\n'
|
||||
<< "MAC address = " << USocketExt::getMacAddress(pcClientSocket, "eth0") << '\n'
|
||||
<< "Network device = " << USocketExt::getNetworkDevice("eth0") << '\n'
|
||||
<< "Gateway address = " << USocketExt::getGatewayAddress(U_CONSTANT_TO_PARAM("192.168.1.0/24")) << '\n'
|
||||
<< "Network address = " << USocketExt::getNetworkAddress(fd, "eth0") << "\n\n";
|
||||
|
|
Loading…
Reference in New Issue
Block a user