Variant f_stream_socket_server(const String& local_socket, VRefParam errnum /* = null */, VRefParam errstr /* = null */, int flags /* = 0 */, const Resource& context /* = null_object */) { HostURL hosturl(static_cast<const std::string>(local_socket)); return socket_server_impl(hosturl, flags, errnum, errstr); }
Variant f_stream_socket_server(CStrRef local_socket, VRefParam errnum /* = null */, VRefParam errstr /* = null */, int flags /* = 0 */, CResRef context /* = null_object */) { Util::HostURL hosturl(static_cast<const std::string>(local_socket)); return socket_server_impl(hosturl, errnum, errstr); }
Variant HHVM_FUNCTION(pfsockopen, const String& hostname, int port /* = -1 */, VRefParam errnum /* = null */, VRefParam errstr /* = null */, double timeout /* = -1.0 */) { HostURL hosturl(static_cast<const std::string>(hostname), port); return sockopen_impl(hosturl, errnum, errstr, timeout, true); }
Variant f_stream_socket_client(const String& remote_socket, VRefParam errnum /* = null */, VRefParam errstr /* = null */, double timeout /* = -1.0 */, int flags /* = 0 */, const Resource& context /* = null_object */) { HostURL hosturl(static_cast<const std::string>(remote_socket)); return sockopen_impl(hosturl, errnum, errstr, timeout, false); }
Variant f_stream_socket_client(CStrRef remote_socket, VRefParam errnum /* = null */, VRefParam errstr /* = null */, double timeout /* = 0.0 */, int flags /* = 0 */, CResRef context /* = null_object */) { Util::HostURL hosturl(static_cast<const std::string>(remote_socket)); return sockopen_impl(hosturl, errnum, errstr, timeout, false); }
Variant HHVM_FUNCTION(socket_server, const String& hostname, int port /* = -1 */, VRefParam errnum /* = null */, VRefParam errstr /* = null */) { HostURL hosturl(static_cast<const std::string>(hostname), port); return socket_server_impl(hosturl, k_STREAM_SERVER_BIND|k_STREAM_SERVER_LISTEN, errnum, errstr); }
Variant f_stream_socket_sendto(const Resource& socket, const String& data, int flags /* = 0 */, const String& address /* = null_string */) { String host; int port; if (address == null_string) { Socket *sock = socket.getTyped<Socket>(); host = sock->getAddress(); port = sock->getPort(); } else { HostURL hosturl(static_cast<std::string>(address)); host = hosturl.getHost(); port = hosturl.getPort(); } return f_socket_sendto(socket, data, data.size(), flags, host, port); }
Variant php_mysql_do_connect_on_link(MySQL* mySQL, String server, String username, String password, String database, int client_flags, bool persistent, bool async, int connect_timeout_ms, int query_timeout_ms) { if (connect_timeout_ms < 0) { connect_timeout_ms = mysqlExtension::ConnectTimeout; } if (query_timeout_ms < 0) { query_timeout_ms = MySQL::GetDefaultReadTimeout(); } if (server.empty()) server = MySQL::GetDefaultServer(); if (username.empty()) username = MySQL::GetDefaultUsername(); if (password.empty()) password = MySQL::GetDefaultPassword(); if (database.empty()) database = MySQL::GetDefaultDatabase(); // server format: hostname[:port][:/path/to/socket] // ipv6 hostname:port is of the form [1:2:3:4:5]:port String host, socket; int port; auto slash_pos = server.find('/'); if (slash_pos != std::string::npos) { socket = server.substr(slash_pos); server = server.substr(0, slash_pos - 1); } HostURL hosturl(std::string(server), MySQL::GetDefaultPort()); if (hosturl.isValid()) { host = hosturl.getHost(); port = hosturl.getPort(); } else { host = server; port = MySQL::GetDefaultPort(); } if (socket.empty()) { socket = MySQL::GetDefaultSocket(); } if (mySQL == nullptr && persistent) { mySQL = MySQL::GetPersistent(host, port, socket, username, password, client_flags); } if (mySQL == nullptr) { mySQL = new MySQL(host.c_str(), port, username.c_str(), password.c_str(), database.c_str()); } if (mySQL->getState() == MySQLState::INITED) { if (async) { #ifdef FACEBOOK if (!mySQL->async_connect(host, port, socket, username, password, database)) { MySQL::SetDefaultConn(mySQL); // so we can report errno by mysql_errno() mySQL->setLastError("mysql_real_connect_nonblocking_init"); return false; } #else throw NotImplementedException("mysql_async_connect_start"); #endif } else { if (!mySQL->connect(host, port, socket, username, password, database, client_flags, connect_timeout_ms)) { MySQL::SetDefaultConn(mySQL); // so we can report errno by mysql_errno() mySQL->setLastError("mysql_connect"); return false; } } } else { if (!mySQL->reconnect(host, port, socket, username, password, database, client_flags, connect_timeout_ms)) { MySQL::SetDefaultConn(mySQL); // so we can report errno by mysql_errno() mySQL->setLastError("mysql_connect"); return false; } } if (persistent) { MySQL::SetPersistent(host, port, socket, username, password, client_flags, mySQL); } MySQL::SetDefaultConn(mySQL); return Resource(mySQL); }
Variant php_mysql_do_connect_on_link(std::shared_ptr<MySQL> mySQL, String server, String username, String password, String database, int client_flags, bool persistent, bool async, int connect_timeout_ms, int query_timeout_ms) { if (connect_timeout_ms < 0) { connect_timeout_ms = mysqlExtension::ConnectTimeout; } if (query_timeout_ms < 0) { query_timeout_ms = MySQL::GetDefaultReadTimeout(); } if (server.empty()) server = MySQL::GetDefaultServer(); if (username.empty()) username = MySQL::GetDefaultUsername(); if (password.empty()) password = MySQL::GetDefaultPassword(); if (database.empty()) database = MySQL::GetDefaultDatabase(); // server format: hostname[:port][:/path/to/socket] // ipv6 hostname:port is of the form [1:2:3:4:5]:port String host, socket; int port; int savePersistent = false; auto slash_pos = server.find('/'); if (slash_pos != std::string::npos) { socket = server.substr(slash_pos); server = server.substr(0, slash_pos - 1); } HostURL hosturl(std::string(server), MySQL::GetDefaultPort()); if (hosturl.isValid()) { host = hosturl.getHost(); port = hosturl.getPort(); } else { host = server; port = MySQL::GetDefaultPort(); } if (socket.empty()) { socket = MySQL::GetDefaultSocket(); } if (MySQL::IsAllowPersistent() && MySQL::GetCurrentNumPersistent() < MySQL::GetMaxNumPersistent() && persistent) { auto p_mySQL = MySQL::GetPersistent(host, port, socket, username, password, client_flags); if (p_mySQL != nullptr) { mySQL = p_mySQL; } else { savePersistent = true; } } if (mySQL == nullptr) { mySQL = std::make_shared<MySQL>(host.c_str(), port, username.c_str(), password.c_str(), database.c_str()); } if (mySQL->getState() == MySQLState::INITED) { if (async) { #ifdef FACEBOOK if (!mySQL->async_connect(host, port, socket, username, password, database)) { MySQL::SetDefaultConn(mySQL); // so we can report errno by mysql_errno() mySQL->setLastError("mysql_real_connect_nonblocking_init"); return false; } #else throw_not_implemented("mysql_async_connect_start"); #endif } else { if (!mySQL->connect(host, port, socket, username, password, database, client_flags, connect_timeout_ms)) { MySQL::SetDefaultConn(mySQL); // so we can report errno by mysql_errno() mySQL->setLastError("mysql_connect"); return false; } } } else { if (!MySQL::IsAllowReconnect()) { raise_warning("MySQL: Reconnects are not allowed"); return false; } if (!mySQL->reconnect(host, port, socket, username, password, database, client_flags, connect_timeout_ms)) { MySQL::SetDefaultConn(mySQL); // so we can report errno by mysql_errno() mySQL->setLastError("mysql_connect"); return false; } } if (savePersistent) { MySQL::SetPersistent(host, port, socket, username, password, client_flags, mySQL); MySQL::SetCurrentNumPersistent(MySQL::GetCurrentNumPersistent() + 1); } MySQL::SetDefaultConn(mySQL); return Variant(req::make<MySQLResource>(mySQL)); }