1 #ifndef __STG_SGCP_UTILS_H__
2 #define __STG_SGCP_UTILS_H__
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 * Author : Maxim Mamontov <faust@stargazer.dp.ua>
24 #include "stg/os_int.h"
29 #include <arpa/inet.h> // hton*
30 #include <netinet/in.h> // in_addr
37 template <typename T> inline T hton(T value) { return value; }
38 template <typename T> inline T ntoh(T value) { return hton(value); }
40 template <> inline uint16_t hton(uint16_t value) { return htons(value); }
41 template <> inline int16_t hton(int16_t value) { return htons(value); }
43 template <> inline uint32_t hton(uint32_t value) { return htonl(value); }
44 template <> inline int32_t hton(int32_t value) { return htonl(value); }
47 uint64_t htonll(uint64_t value)
50 const uint32_t high_part = htonl(static_cast<uint32_t>(value >> 32));
51 const uint32_t low_part = htonl(static_cast<uint32_t>(value & 0xFFFFFFFFLL));
53 return (static_cast<uint64_t>(low_part) << 32) | high_part;
59 template <> inline uint64_t hton(uint64_t value) { return htonll(value); }
60 template <> inline int64_t hton(int64_t value) { return htonll(value); }
62 std::vector<in_addr> resolve(const std::string& address);