@@ -141,6 +141,7 @@ class HttpClient {
141
141
#endif
142
142
bool bind (std::string address, int port = 0 );
143
143
bool connect ();
144
+ void set_error (int error, const char *msg, int status);
144
145
bool keep_liveness ();
145
146
bool send ();
146
147
void reset ();
@@ -174,7 +175,7 @@ class HttpClient {
174
175
#endif
175
176
void apply_setting (zval *zset, const bool check_all = true );
176
177
void set_basic_auth (const std::string &username, const std::string &password);
177
- bool exec (std::string path );
178
+ bool exec (std::string _path );
178
179
bool recv (double timeout = 0 );
179
180
void recv (zval *zframe, double timeout = 0 );
180
181
bool recv_http_response (double timeout = 0 );
@@ -808,14 +809,7 @@ bool HttpClient::connect() {
808
809
if (!body) {
809
810
body = new String (SW_HTTP_RESPONSE_INIT_SIZE);
810
811
if (!body) {
811
- zend_update_property_long (
812
- swoole_http_client_coro_ce, SW_Z8_OBJ_P (zobject), ZEND_STRL (" errCode" ), ENOMEM);
813
- zend_update_property_string (
814
- swoole_http_client_coro_ce, SW_Z8_OBJ_P (zobject), ZEND_STRL (" errMsg" ), swoole_strerror (ENOMEM));
815
- zend_update_property_long (swoole_http_client_coro_ce,
816
- SW_Z8_OBJ_P (zobject),
817
- ZEND_STRL (" statusCode" ),
818
- HTTP_CLIENT_ESTATUS_CONNECT_FAILED);
812
+ set_error (ENOMEM, swoole_strerror (ENOMEM), HTTP_CLIENT_ESTATUS_CONNECT_FAILED);
819
813
return false ;
820
814
}
821
815
}
@@ -824,13 +818,7 @@ bool HttpClient::connect() {
824
818
socket = new Socket (socket_type);
825
819
if (UNEXPECTED (socket->get_fd () < 0 )) {
826
820
php_swoole_sys_error (E_WARNING, " new Socket() failed" );
827
- zend_update_property_long (swoole_http_client_coro_ce, SW_Z8_OBJ_P (zobject), ZEND_STRL (" errCode" ), errno);
828
- zend_update_property_string (
829
- swoole_http_client_coro_ce, SW_Z8_OBJ_P (zobject), ZEND_STRL (" errMsg" ), swoole_strerror (errno));
830
- zend_update_property_long (swoole_http_client_coro_ce,
831
- SW_Z8_OBJ_P (zobject),
832
- ZEND_STRL (" statusCode" ),
833
- HTTP_CLIENT_ESTATUS_CONNECT_FAILED);
821
+ set_error (errno, swoole_strerror (errno), HTTP_CLIENT_ESTATUS_CONNECT_FAILED);
834
822
delete socket;
835
823
socket = nullptr ;
836
824
return false ;
@@ -849,14 +837,7 @@ bool HttpClient::connect() {
849
837
// connect
850
838
socket->set_timeout (connect_timeout, Socket::TIMEOUT_CONNECT);
851
839
if (!socket->connect (host, port)) {
852
- zend_update_property_long (
853
- swoole_http_client_coro_ce, SW_Z8_OBJ_P (zobject), ZEND_STRL (" errCode" ), socket->errCode );
854
- zend_update_property_string (
855
- swoole_http_client_coro_ce, SW_Z8_OBJ_P (zobject), ZEND_STRL (" errMsg" ), socket->errMsg );
856
- zend_update_property_long (swoole_http_client_coro_ce,
857
- SW_Z8_OBJ_P (zobject),
858
- ZEND_STRL (" statusCode" ),
859
- HTTP_CLIENT_ESTATUS_CONNECT_FAILED);
840
+ set_error (socket->errCode , socket->errMsg , HTTP_CLIENT_ESTATUS_CONNECT_FAILED);
860
841
close ();
861
842
return false ;
862
843
}
@@ -866,19 +847,20 @@ bool HttpClient::connect() {
866
847
return true ;
867
848
}
868
849
850
+ void HttpClient::set_error (int error, const char *msg, int status) {
851
+ auto ce = swoole_http_client_coro_ce;
852
+ auto obj = SW_Z8_OBJ_P (zobject);
853
+ zend_update_property_long (ce, obj, ZEND_STRL (" errCode" ), error);
854
+ zend_update_property_string (ce, obj, ZEND_STRL (" errMsg" ), msg);
855
+ zend_update_property_long (ce, obj, ZEND_STRL (" statusCode" ), status);
856
+ }
857
+
869
858
bool HttpClient::keep_liveness () {
870
859
if (!socket || !socket->check_liveness ()) {
871
860
if (socket) {
872
861
/* in progress */
873
862
socket->check_bound_co (SW_EVENT_RDWR);
874
- zend_update_property_long (
875
- swoole_http_client_coro_ce, SW_Z8_OBJ_P (zobject), ZEND_STRL (" errCode" ), socket->errCode );
876
- zend_update_property_string (
877
- swoole_http_client_coro_ce, SW_Z8_OBJ_P (zobject), ZEND_STRL (" errMsg" ), socket->errMsg );
878
- zend_update_property_long (swoole_http_client_coro_ce,
879
- SW_Z8_OBJ_P (zobject),
880
- ZEND_STRL (" statusCode" ),
881
- HTTP_CLIENT_ESTATUS_SERVER_RESET);
863
+ set_error (socket->errCode , socket->errMsg , HTTP_CLIENT_ESTATUS_SERVER_RESET);
882
864
close (false );
883
865
}
884
866
for (; reconnected_count < reconnect_interval; reconnected_count++) {
@@ -1350,21 +1332,16 @@ bool HttpClient::send() {
1350
1332
1351
1333
if (socket->send_all (buffer->str , buffer->length ) != (ssize_t ) buffer->length ) {
1352
1334
_send_fail:
1353
- zend_update_property_long (
1354
- swoole_http_client_coro_ce, SW_Z8_OBJ_P (zobject), ZEND_STRL (" errCode" ), socket->errCode );
1355
- zend_update_property_string (
1356
- swoole_http_client_coro_ce, SW_Z8_OBJ_P (zobject), ZEND_STRL (" errMsg" ), socket->errMsg );
1357
- zend_update_property_long (
1358
- swoole_http_client_coro_ce, SW_Z8_OBJ_P (zobject), ZEND_STRL (" statusCode" ), HTTP_CLIENT_ESTATUS_SEND_FAILED);
1335
+ set_error (socket->errCode , socket->errMsg , HTTP_CLIENT_ESTATUS_SEND_FAILED);
1359
1336
close ();
1360
1337
return false ;
1361
1338
}
1362
1339
wait = true ;
1363
1340
return true ;
1364
1341
}
1365
1342
1366
- bool HttpClient::exec (std::string path ) {
1367
- this -> path = path ;
1343
+ bool HttpClient::exec (std::string _path ) {
1344
+ path = _path ;
1368
1345
// bzero when make a new reqeust
1369
1346
reconnected_count = 0 ;
1370
1347
if (defer) {
@@ -1378,7 +1355,7 @@ bool HttpClient::recv(double timeout) {
1378
1355
if (!wait) {
1379
1356
return false ;
1380
1357
}
1381
- if (!socket || !socket->is_connect ()) {
1358
+ if (!socket || !socket->is_connected ()) {
1382
1359
swoole_set_last_error (SW_ERROR_CLIENT_NO_CONNECTION);
1383
1360
zend_update_property_long (
1384
1361
swoole_http_client_coro_ce, SW_Z8_OBJ_P (zobject), ZEND_STRL (" errCode" ), swoole_get_last_error ());
@@ -1426,7 +1403,7 @@ bool HttpClient::recv(double timeout) {
1426
1403
void HttpClient::recv (zval *zframe, double timeout) {
1427
1404
SW_ASSERT (websocket);
1428
1405
ZVAL_FALSE (zframe);
1429
- if (!socket || !socket->is_connect ()) {
1406
+ if (!socket || !socket->is_connected ()) {
1430
1407
swoole_set_last_error (SW_ERROR_CLIENT_NO_CONNECTION);
1431
1408
zend_update_property_long (
1432
1409
swoole_http_client_coro_ce, SW_Z8_OBJ_P (zobject), ZEND_STRL (" errCode" ), swoole_get_last_error ());
@@ -1580,7 +1557,7 @@ bool HttpClient::push(zval *zdata, zend_long opcode, uint8_t flags) {
1580
1557
HTTP_CLIENT_ESTATUS_CONNECT_FAILED);
1581
1558
return false ;
1582
1559
}
1583
- if (!socket || !socket->is_connect ()) {
1560
+ if (!socket || !socket->is_connected ()) {
1584
1561
swoole_set_last_error (SW_ERROR_CLIENT_NO_CONNECTION);
1585
1562
zend_update_property_long (
1586
1563
swoole_http_client_coro_ce, SW_Z8_OBJ_P (zobject), ZEND_STRL (" errCode" ), swoole_get_last_error ());
@@ -1779,7 +1756,7 @@ static PHP_METHOD(swoole_http_client_coro, __construct) {
1779
1756
HttpClientObject *hcc = php_swoole_http_client_coro_fetch_object (Z_OBJ_P (ZEND_THIS));
1780
1757
char *host;
1781
1758
size_t host_len;
1782
- zend_long port = 80 ;
1759
+ zend_long port = 0 ;
1783
1760
zend_bool ssl = 0 ;
1784
1761
1785
1762
ZEND_PARSE_PARAMETERS_START_EX (ZEND_PARSE_PARAMS_THROW, 1 , 3 )
@@ -1807,6 +1784,9 @@ static PHP_METHOD(swoole_http_client_coro, __construct) {
1807
1784
RETURN_FALSE;
1808
1785
}
1809
1786
#endif
1787
+ if (port == 0 ) {
1788
+ port = ssl ? 443 : 80 ;
1789
+ }
1810
1790
hcc->phc = new HttpClient (ZEND_THIS, std::string (host, host_len), port, ssl);
1811
1791
}
1812
1792
0 commit comments