+#define http_flush() _http_flush(TSRMLS_C)
+/* {{{ static inline void http_flush() */
+static inline void _http_flush(TSRMLS_D)
+{
+ php_end_ob_buffer(1, 1 TSRMLS_CC);
+ sapi_flush(TSRMLS_C);
+}
+/* }}} */
+
+#define http_sleep() _http_sleep(TSRMLS_C)
+/* {{{ static inline void http_sleep() */
+static inline void _http_sleep(TSRMLS_D)
+{
+ if (HTTP_G(send).throttle_delay >= 0.001) {
+#if defined(PHP_WIN32)
+ Sleep((DWORD) (HTTP_G(send).throttle_delay * 1000));
+#elif defined(HAVE_USLEEP)
+ usleep(HTTP_G(send).throttle_delay * 1000000);
+#elif defined(HAVE_NANOSLEEP)
+ struct timespec req, rem;
+
+ req.tv_sec = (time_t) HTTP_G(send).throttle_delay;
+ req.tv_nsec = (HTTP_G(send).throttle_delay * 1000000000) % 1000000000;
+
+ while (nanosleep(&req, &rem) && (errno == EINTR) && (rem.tv_nsec > 1000000)) {
+ req.tv_sec = rem.tv_sec;
+ req.tv_nsec = rem.tv_nsec;
+ }
+#endif
+ }
+}
+/* }}} */
+
+#define HTTP_CHUNK_AVAIL(len) ((len -= HTTP_G(send).buffer_size) >= 0)
+#define HTTP_CHUNK_WRITE(data, l, dofree, dosleep) \
+ { \
+ long size = (long) l; \
+ \
+ if ((1 > size) || (size - PHPWRITE(data, size))) { \
+ if (dofree) { \
+ efree(data); \
+ } \
+ return FAILURE; \
+ } \
+ \
+ http_flush(); \
+ if (dosleep) { \
+ http_sleep(); \
+ } \
+ }
+