| 6801 | } |
| 6802 | |
| 6803 | TSReturnCode |
| 6804 | TSHttpTxnServerPush(TSHttpTxn txnp, const char *url, int url_len) |
| 6805 | { |
| 6806 | sdk_assert(sdk_sanity_check_txn(txnp) == TS_SUCCESS); |
| 6807 | sdk_assert(url != nullptr); |
| 6808 | |
| 6809 | if (url_len < 0) { |
| 6810 | url_len = strlen(url); |
| 6811 | } |
| 6812 | |
| 6813 | URL url_obj; |
| 6814 | url_obj.create(nullptr); |
| 6815 | if (url_obj.parse(url, url_len) == PARSE_RESULT_ERROR) { |
| 6816 | url_obj.destroy(); |
| 6817 | return TS_ERROR; |
| 6818 | } |
| 6819 | |
| 6820 | HttpSM *sm = reinterpret_cast<HttpSM *>(txnp); |
| 6821 | Http2Stream *stream = dynamic_cast<Http2Stream *>(sm->get_ua_txn()); |
| 6822 | if (stream == nullptr) { |
| 6823 | url_obj.destroy(); |
| 6824 | return TS_ERROR; |
| 6825 | } |
| 6826 | |
| 6827 | Http2ClientSession *ua_session = static_cast<Http2ClientSession *>(stream->get_proxy_ssn()); |
| 6828 | SCOPED_MUTEX_LOCK(lock, ua_session->mutex, this_ethread()); |
| 6829 | if (ua_session->connection_state.is_state_closed() || ua_session->is_url_pushed(url, url_len)) { |
| 6830 | url_obj.destroy(); |
| 6831 | return TS_ERROR; |
| 6832 | } |
| 6833 | |
| 6834 | HTTPHdr *hptr = &(sm->t_state.hdr_info.client_request); |
| 6835 | TSMLoc obj = reinterpret_cast<TSMLoc>(hptr->m_http); |
| 6836 | |
| 6837 | MIMEHdrImpl *mh = _hdr_mloc_to_mime_hdr_impl(obj); |
| 6838 | MIMEField *f = mime_hdr_field_find(mh, MIME_FIELD_ACCEPT_ENCODING, MIME_LEN_ACCEPT_ENCODING); |
| 6839 | if (!stream->push_promise(url_obj, f)) { |
| 6840 | url_obj.destroy(); |
| 6841 | return TS_ERROR; |
| 6842 | } |
| 6843 | |
| 6844 | ua_session->add_url_to_pushed_table(url, url_len); |
| 6845 | |
| 6846 | url_obj.destroy(); |
| 6847 | return TS_SUCCESS; |
| 6848 | } |
| 6849 | |
| 6850 | TSReturnCode |
| 6851 | TSHttpTxnClientStreamIdGet(TSHttpTxn txnp, uint64_t *stream_id) |
no test coverage detected