MCPcopy Create free account
hub / github.com/apache/trafficserver / TSHttpTxnServerPush

Function TSHttpTxnServerPush

src/api/InkAPI.cc:6803–6848  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6801}
6802
6803TSReturnCode
6804TSHttpTxnServerPush(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
6850TSReturnCode
6851TSHttpTxnClientStreamIdGet(TSHttpTxn txnp, uint64_t *stream_id)

Callers 3

server_push_pluginFunction · 0.85
serverPushMethod · 0.85
ts_lua_http_server_pushFunction · 0.85

Calls 13

sdk_sanity_check_txnFunction · 0.85
this_ethreadFunction · 0.85
mime_hdr_field_findFunction · 0.85
get_ua_txnMethod · 0.80
get_proxy_ssnMethod · 0.80
is_state_closedMethod · 0.80
is_url_pushedMethod · 0.80
push_promiseMethod · 0.80
createMethod · 0.45
parseMethod · 0.45

Tested by

no test coverage detected