Arquivos
Jordan DeLong 0a0712262e Remove #includes of base.h from the headers in util/
And try to fix downstream indirect dependencies to include
what they use (plenty of indirect includes still missing, though).
Most TU's still get this all via the complex-types.h stuff.

Reviewed By: @dariorussi

Differential Revision: D1115342
2014-01-06 11:42:21 -08:00

84 linhas
2.6 KiB
C++

/*
+----------------------------------------------------------------------+
| HipHop for PHP |
+----------------------------------------------------------------------+
| Copyright (c) 2010-2013 Facebook, Inc. (http://www.facebook.com) |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available through the world-wide-web at the following url: |
| http://www.php.net/license/3_01.txt |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
*/
#ifndef incl_HPHP_NETWORK_H_
#define incl_HPHP_NETWORK_H_
#include <string>
#include <netdb.h>
#include <sys/socket.h>
#include <stdlib.h>
/**
* Network utility functions.
*/
namespace HPHP { namespace Util {
///////////////////////////////////////////////////////////////////////////////
// thread-safe network functions
class HostEnt {
public:
HostEnt() : tmphstbuf(nullptr) {}
~HostEnt() { if (tmphstbuf) free(tmphstbuf);}
struct hostent hostbuf;
char *tmphstbuf;
int herr;
};
// Extract out the scheme, host and port from a URL
// http://192.168.1.0:80
// http, 192.168.1.0, 80
// http://[2a03:2880::1]:80
// http, 2a03:2880::1, 80
// ssl://192.168.1.0:443
// ssl, 192.168.1.0, 80
// ssl://[2a03:2880::1]:443
// ssl, 2a03:2880::1, 443
class HostURL {
public:
explicit HostURL(const std::string &hosturl, int port = 0);
bool isIPv6() const {return m_ipv6;}
bool isValid() const {return m_valid;}
uint16_t getPort() const {return m_port;}
std::string getScheme() const {return m_scheme;}
std::string getHost() const {return m_host;}
std::string getHostURL() const {return m_hosturl;}
private:
bool m_ipv6;
bool m_valid;
uint16_t m_port;
std::string m_scheme;
std::string m_host;
std::string m_hosturl;
};
bool safe_gethostbyname(const char *address, HostEnt &result);
std::string safe_inet_ntoa(struct in_addr &in);
///////////////////////////////////////////////////////////////////////////////
/**
* Get local machine's primary IP address.
*/
std::string GetPrimaryIP();
///////////////////////////////////////////////////////////////////////////////
}}
#endif // incl_HPHP_NETWORK_H_