PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.1-beta
16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / jetpack_vendor / automattic / jetpack-connection / legacy / class-jetpack-ixr-client.php
jetpack / jetpack_vendor / automattic / jetpack-connection / legacy Last commit date
class-jetpack-ixr-client.php 9 months ago class-jetpack-ixr-clientmulticall.php 9 months ago class-jetpack-options.php 9 months ago class-jetpack-signature.php 3 months ago class-jetpack-tracks-client.php 3 months ago class-jetpack-tracks-event.php 3 years ago class-jetpack-xmlrpc-server.php 3 months ago
class-jetpack-ixr-client.php
188 lines
1 <?php
2 /**
3 * IXR_Client
4 *
5 * @package automattic/jetpack-connection
6 *
7 * @since 1.7.0
8 * @since-jetpack 1.5
9 * @since-jetpack 7.7 Moved to the jetpack-connection package.
10 */
11
12 use Automattic\Jetpack\Connection\Client;
13 use Automattic\Jetpack\Connection\Manager;
14
15 /**
16 * Disable direct access.
17 */
18 if ( ! defined( 'ABSPATH' ) ) {
19 exit( 0 );
20 }
21
22 if ( ! class_exists( IXR_Client::class ) ) {
23 require_once ABSPATH . WPINC . '/class-IXR.php';
24 }
25
26 /**
27 * A Jetpack implementation of the WordPress core IXR client.
28 */
29 class Jetpack_IXR_Client extends IXR_Client {
30 /**
31 * Jetpack args, used for the remote requests.
32 *
33 * @var array
34 */
35 public $jetpack_args = null;
36
37 /**
38 * Remote Response Headers.
39 *
40 * @var array
41 */
42 public $response_headers = null;
43
44 /**
45 * Holds the raw remote response from the latest call to query().
46 *
47 * @var null|array|WP_Error
48 */
49 public $last_response = null;
50
51 /**
52 * Constructor.
53 * Initialize a new Jetpack IXR client instance.
54 *
55 * @param array $args Jetpack args, used for the remote requests.
56 * @param string|bool $path Path to perform the reuqest to.
57 * @param int $port Port number.
58 * @param int $timeout The connection timeout, in seconds.
59 */
60 public function __construct( $args = array(), $path = false, $port = 80, $timeout = 15 ) {
61 $connection = new Manager();
62
63 $defaults = array(
64 'url' => $connection->xmlrpc_api_url(),
65 'user_id' => 0,
66 'headers' => array(),
67 );
68
69 $args = wp_parse_args( $args, $defaults );
70 $args['headers'] = array_merge( array( 'Content-Type' => 'text/xml' ), (array) $args['headers'] );
71
72 $this->jetpack_args = $args;
73
74 $this->IXR_Client( $args['url'], $path, $port, $timeout );
75 }
76
77 /**
78 * Perform the IXR request.
79 *
80 * @param mixed ...$args IXR method and args.
81 *
82 * @return bool True if request succeeded, false otherwise.
83 */
84 public function query( ...$args ) {
85 $method = array_shift( $args );
86 $request = new IXR_Request( $method, $args );
87 $xml = trim( $request->getXml() );
88
89 $response = Client::remote_request( $this->jetpack_args, $xml );
90
91 // Store response headers.
92 $this->response_headers = wp_remote_retrieve_headers( $response );
93
94 $this->last_response = $response;
95 if ( is_array( $this->last_response ) && isset( $this->last_response['http_response'] ) ) {
96 // If the expected array response is received, format the data as plain arrays.
97 $this->last_response = $this->last_response['http_response']->to_array();
98 $this->last_response['headers'] = $this->last_response['headers']->getAll();
99 }
100
101 if ( is_wp_error( $response ) ) {
102 $this->error = new IXR_Error( -10520, sprintf( 'Jetpack: [%s] %s', $response->get_error_code(), $response->get_error_message() ) );
103 return false;
104 }
105
106 if ( ! $response ) {
107 $this->error = new IXR_Error( -10520, 'Jetpack: Unknown Error' );
108 return false;
109 }
110
111 if ( 200 !== wp_remote_retrieve_response_code( $response ) ) {
112 $this->error = new IXR_Error( -32300, 'transport error - HTTP status code was not 200' );
113 return false;
114 }
115
116 $content = wp_remote_retrieve_body( $response );
117
118 // Now parse what we've got back.
119 $this->message = new IXR_Message( $content );
120 if ( ! $this->message->parse() ) {
121 // XML error.
122 $this->error = new IXR_Error( -32700, 'parse error. not well formed' );
123 return false;
124 }
125
126 // Is the message a fault?
127 if ( 'fault' === $this->message->messageType ) {
128 $this->error = new IXR_Error( $this->message->faultCode, $this->message->faultString );
129 return false;
130 }
131
132 // Message must be OK.
133 return true;
134 }
135
136 /**
137 * Retrieve the Jetpack error from the result of the last request.
138 *
139 * @param int $fault_code Fault code.
140 * @param string $fault_string Fault string.
141 * @return WP_Error Error object.
142 */
143 public function get_jetpack_error( $fault_code = null, $fault_string = null ) {
144 if ( $fault_code === null ) {
145 $fault_code = $this->error->code;
146 }
147
148 if ( $fault_string === null ) {
149 $fault_string = $this->error->message;
150 }
151
152 if ( preg_match( '#jetpack:\s+\[(\w+)\]\s*(.*)?$#i', $fault_string, $match ) ) {
153 $code = $match[1];
154 $message = $match[2];
155 $status = $fault_code;
156 return new WP_Error( $code, $message, $status );
157 }
158
159 return new WP_Error( "IXR_{$fault_code}", $fault_string );
160 }
161
162 /**
163 * Retrieve a response header if set.
164 *
165 * @param string $name header name.
166 * @return string|bool Header value if set, false if not set.
167 */
168 public function get_response_header( $name ) {
169 if ( isset( $this->response_headers[ $name ] ) ) {
170 return $this->response_headers[ $name ];
171 }
172 // case-insensitive header names: http://www.ietf.org/rfc/rfc2616.txt.
173 if ( isset( $this->response_headers[ strtolower( $name ) ] ) ) {
174 return $this->response_headers[ strtolower( $name ) ];
175 }
176 return false;
177 }
178
179 /**
180 * Retrieve the raw response for the last query() call.
181 *
182 * @return null|array|WP_Error
183 */
184 public function get_last_response() {
185 return $this->last_response;
186 }
187 }
188