PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.36.0
MailPoet – Newsletters, Email Marketing, and Automation v5.36.0
5.36.0 5.35.1 5.35.0 5.34.3 5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / vendor / mixpanel / mixpanel-php / lib / ConsumerStrategies / SocketConsumer.php
mailpoet / vendor / mixpanel / mixpanel-php / lib / ConsumerStrategies Last commit date
AbstractConsumer.php 2 years ago CurlConsumer.php 2 years ago FileConsumer.php 2 years ago SocketConsumer.php 2 years ago index.php 2 years ago
SocketConsumer.php
163 lines
1 <?php
2 if (!defined('ABSPATH')) exit;
3 require_once(dirname(__FILE__) . "/AbstractConsumer.php");
4 class ConsumerStrategies_SocketConsumer extends ConsumerStrategies_AbstractConsumer {
5 private $_host;
6 private $_endpoint;
7 private $_connect_timeout;
8 private $_protocol;
9 private $_socket;
10 private $_async;
11 private $_port;
12 public function __construct($options = array()) {
13 parent::__construct($options);
14 $this->_host = $options['host'];
15 $this->_endpoint = $options['endpoint'];
16 $this->_connect_timeout = isset($options['connect_timeout']) ? $options['connect_timeout'] : 5;
17 $this->_async = isset($options['async']) && $options['async'] === false ? false : true;
18 if (array_key_exists('use_ssl', $options) && $options['use_ssl'] == true) {
19 $this->_protocol = "ssl";
20 $this->_port = 443;
21 } else {
22 $this->_protocol = "tcp";
23 $this->_port = 80;
24 }
25 }
26 public function persist($batch) {
27 $socket = $this->_getSocket();
28 if (!is_resource($socket)) {
29 return false;
30 }
31 $data = "data=".$this->_encode($batch);
32 $body = "";
33 $body.= "POST ".$this->_endpoint." HTTP/1.1\r\n";
34 $body.= "Host: " . $this->_host . "\r\n";
35 $body.= "Content-Type: application/x-www-form-urlencoded\r\n";
36 $body.= "Accept: application/json\r\n";
37 $body.= "Content-length: " . strlen($data) . "\r\n";
38 $body.= "\r\n";
39 $body.= $data;
40 return $this->_write($socket, $body);
41 }
42 private function _getSocket() {
43 if(is_resource($this->_socket)) {
44 if ($this->_debug()) {
45 $this->_log("Using existing socket");
46 }
47 return $this->_socket;
48 } else {
49 if ($this->_debug()) {
50 $this->_log("Creating new socket at ".time());
51 }
52 return $this->_createSocket();
53 }
54 }
55 private function _createSocket($retry = true) {
56 try {
57 $socket = pfsockopen($this->_protocol . "://" . $this->_host, $this->_port, $err_no, $err_msg, $this->_connect_timeout);
58 if ($this->_debug()) {
59 $this->_log("Opening socket connection to " . $this->_protocol . "://" . $this->_host . ":" . $this->_port);
60 }
61 if ($err_no != 0) {
62 $this->_handleError($err_no, $err_msg);
63 return $retry == true ? $this->_createSocket(false) : false;
64 } else {
65 // cache the socket
66 $this->_socket = $socket;
67 return $socket;
68 }
69 } catch (Exception $e) {
70 $this->_handleError($e->getCode(), $e->getMessage());
71 return $retry == true ? $this->_createSocket(false) : false;
72 }
73 }
74 private function _destroySocket() {
75 $socket = $this->_socket;
76 $this->_socket = null;
77 fclose($socket);
78 }
79 private function _write($socket, $data, $retry = true) {
80 $bytes_sent = 0;
81 $bytes_total = strlen($data);
82 $socket_closed = false;
83 $success = true;
84 $max_bytes_per_write = 8192;
85 // if we have no data to write just return true
86 if ($bytes_total == 0) {
87 return true;
88 }
89 // try to write the data
90 while (!$socket_closed && $bytes_sent < $bytes_total) {
91 try {
92 $bytes = fwrite($socket, $data, $max_bytes_per_write);
93 if ($this->_debug()) {
94 $this->_log("Socket wrote ".$bytes." bytes");
95 }
96 // if we actually wrote data, then remove the written portion from $data left to write
97 if ($bytes > 0) {
98 $data = substr($data, $max_bytes_per_write);
99 }
100 } catch (Exception $e) {
101 $this->_handleError($e->getCode(), $e->getMessage());
102 $socket_closed = true;
103 }
104 if (isset($bytes) && $bytes) {
105 $bytes_sent += $bytes;
106 } else {
107 $socket_closed = true;
108 }
109 }
110 // create a new socket if the current one is closed and retry the message
111 if ($socket_closed) {
112 $this->_destroySocket();
113 if ($retry) {
114 if ($this->_debug()) {
115 $this->_log("Retrying socket write...");
116 }
117 $socket = $this->_getSocket();
118 if ($socket) return $this->_write($socket, $data, false);
119 }
120 return false;
121 }
122 // only wait for the response in debug mode or if we explicitly want to be synchronous
123 if ($this->_debug() || !$this->_async) {
124 $res = $this->handleResponse(fread($socket, 2048));
125 if ($res["status"] != "200") {
126 $this->_handleError($res["status"], $res["body"]);
127 $success = false;
128 }
129 }
130 return $success;
131 }
132 private function handleResponse($response) {
133 $lines = explode("\n", $response);
134 // extract headers
135 $headers = array();
136 foreach($lines as $line) {
137 $kvsplit = explode(":", $line);
138 if (count($kvsplit) == 2) {
139 $header = $kvsplit[0];
140 $value = $kvsplit[1];
141 $headers[$header] = trim($value);
142 }
143 }
144 // extract status
145 $line_one_exploded = explode(" ", $lines[0]);
146 $status = $line_one_exploded[1];
147 // extract body
148 $body = $lines[count($lines) - 1];
149 // if the connection has been closed lets kill the socket
150 if (isset($headers["Connection"]) and $headers['Connection'] == "close") {
151 $this->_destroySocket();
152 if ($this->_debug()) {
153 $this->_log("Server told us connection closed so lets destroy the socket so it'll reconnect on next call");
154 }
155 }
156 $ret = array(
157 "status" => $status,
158 "body" => $body,
159 );
160 return $ret;
161 }
162 }
163