@@ -149,7 +149,7 @@ class http2_client
149
149
http2_client_stream* create_stream (uint32_t stream_id, bool pipeline);
150
150
bool send_window_update (int stream_id, uint32_t size);
151
151
bool send_ping_frame ();
152
- bool send_data (uint32_t stream_id, zval *data , bool end);
152
+ bool send_data (uint32_t stream_id, zval *zdata , bool end);
153
153
uint32_t send_request (zval *req);
154
154
bool send_goaway_frame (zend_long error_code, const char *debug_data, size_t debug_data_len);
155
155
enum swReturn_code parse_frame (zval *return_value);
@@ -1255,52 +1255,48 @@ uint32_t http2_client::send_request(zval *req)
1255
1255
return stream->stream_id ;
1256
1256
}
1257
1257
1258
- bool http2_client::send_data (uint32_t stream_id, zval *data , bool end)
1258
+ bool http2_client::send_data (uint32_t stream_id, zval *zdata , bool end)
1259
1259
{
1260
1260
char buffer[SW_HTTP2_FRAME_HEADER_SIZE];
1261
1261
http2_client_stream *stream = get_stream (stream_id);
1262
+ int flag = end ? SW_HTTP2_FLAG_END_STREAM : 0 ;
1262
1263
1263
1264
if (stream == NULL || stream->type != SW_HTTP2_STREAM_PIPELINE)
1264
1265
{
1265
1266
update_error_properties (EINVAL, cpp_string::format (" can not found stream#%u" , stream_id).c_str ());
1266
1267
return false ;
1267
1268
}
1268
1269
1269
- int flag = end ? SW_HTTP2_FLAG_END_STREAM : 0 ;
1270
-
1271
- if (ZVAL_IS_ARRAY (data))
1270
+ if (ZVAL_IS_ARRAY (zdata))
1272
1271
{
1273
1272
size_t len;
1274
1273
smart_str formstr_s = { 0 };
1275
- char *formstr = php_swoole_http_build_query (data , &len, &formstr_s);
1274
+ char *formstr = php_swoole_http_build_query (zdata , &len, &formstr_s);
1276
1275
if (formstr == NULL )
1277
1276
{
1278
1277
php_swoole_error (E_WARNING, " http_build_query failed" );
1279
1278
return false ;
1280
1279
}
1281
- memset (buffer, 0 , SW_HTTP2_FRAME_HEADER_SIZE);
1282
1280
swHttp2_set_frame_header (buffer, SW_HTTP2_TYPE_DATA, len, flag, stream_id);
1283
1281
swTraceLog (SW_TRACE_HTTP2, " [" SW_ECHO_GREEN " , END, STREAM#%d] length=%zu" , swHttp2_get_type (SW_HTTP2_TYPE_DATA), stream_id, len);
1284
1282
if (!send (buffer, SW_HTTP2_FRAME_HEADER_SIZE) || !send (formstr, len))
1285
1283
{
1284
+ smart_str_free (&formstr_s);
1286
1285
return false ;
1287
1286
}
1288
1287
smart_str_free (&formstr_s);
1289
1288
}
1290
- else if ( Z_TYPE_P (data) == IS_STRING)
1289
+ else
1291
1290
{
1292
- swHttp2_set_frame_header (buffer, SW_HTTP2_TYPE_DATA, Z_STRLEN_P (data), flag, stream_id);
1293
- swTraceLog (SW_TRACE_HTTP2, " [" SW_ECHO_GREEN " , END, STREAM#%d] length=%zu" , swHttp2_get_type (SW_HTTP2_TYPE_DATA), stream_id, Z_STRLEN_P (data));
1294
- if (!send (buffer, SW_HTTP2_FRAME_HEADER_SIZE) || !send (Z_STRVAL_P (data), Z_STRLEN_P (data)))
1291
+ zend::string data (zdata);
1292
+ swHttp2_set_frame_header (buffer, SW_HTTP2_TYPE_DATA, data.len (), flag, stream_id);
1293
+ swTraceLog (SW_TRACE_HTTP2, " [" SW_ECHO_GREEN " , END, STREAM#%d] length=%zu" , swHttp2_get_type (SW_HTTP2_TYPE_DATA), stream_id, data.len ());
1294
+ if (!send (buffer, SW_HTTP2_FRAME_HEADER_SIZE) || !send (data.val (), data.len ()))
1295
1295
{
1296
1296
return false ;
1297
1297
}
1298
1298
}
1299
- else
1300
- {
1301
- php_swoole_error (E_WARNING, " unknown data type[%d]" , Z_TYPE_P (data) );
1302
- return false ;
1303
- }
1299
+
1304
1300
return true ;
1305
1301
}
1306
1302
0 commit comments