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

Function TSMimeHdrFieldCopy

src/api/InkAPI.cc:1868–1913  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1866}
1867
1868TSReturnCode
1869TSMimeHdrFieldCopy(TSMBuffer dest_bufp, TSMLoc dest_hdr, TSMLoc dest_field, TSMBuffer src_bufp, TSMLoc src_hdr, TSMLoc src_field)
1870{
1871 // Allow to modify the buffer only
1872 // if bufp is modifiable. If bufp is not modifiable return
1873 // TS_ERROR. If allowed, return TS_SUCCESS. Changed the
1874 // return value of function from void to TSReturnCode.
1875 sdk_assert(sdk_sanity_check_mbuffer(src_bufp) == TS_SUCCESS);
1876 sdk_assert(sdk_sanity_check_mbuffer(dest_bufp) == TS_SUCCESS);
1877 sdk_assert((sdk_sanity_check_mime_hdr_handle(src_hdr) == TS_SUCCESS) ||
1878 (sdk_sanity_check_http_hdr_handle(src_hdr) == TS_SUCCESS));
1879 sdk_assert((sdk_sanity_check_mime_hdr_handle(dest_hdr) == TS_SUCCESS) ||
1880 (sdk_sanity_check_http_hdr_handle(dest_hdr) == TS_SUCCESS));
1881 sdk_assert(sdk_sanity_check_field_handle(src_field, src_hdr) == TS_SUCCESS);
1882 sdk_assert(sdk_sanity_check_field_handle(dest_field, dest_hdr) == TS_SUCCESS);
1883
1884 if (!isWriteable(dest_bufp)) {
1885 return TS_ERROR;
1886 }
1887
1888 bool dest_attached;
1889 MIMEFieldSDKHandle *s_handle = reinterpret_cast<MIMEFieldSDKHandle *>(src_field);
1890 MIMEFieldSDKHandle *d_handle = reinterpret_cast<MIMEFieldSDKHandle *>(dest_field);
1891 HdrHeap *d_heap = (reinterpret_cast<HdrHeapSDKHandle *>(dest_bufp))->m_heap;
1892
1893 // FIX: This tortuous detach/change/attach algorithm is due to the
1894 // fact that we can't change the name of an attached header (assertion)
1895
1896 // TODO: This is never used ... is_live() has no side effects, so this should be ok
1897 // to not call, so commented out
1898 // src_attached = (s_handle->mh && s_handle->field_ptr->is_live());
1899 dest_attached = (d_handle->mh && d_handle->field_ptr->is_live());
1900
1901 if (dest_attached) {
1902 mime_hdr_field_detach(d_handle->mh, d_handle->field_ptr, false);
1903 }
1904
1905 mime_field_name_value_set(d_heap, d_handle->mh, d_handle->field_ptr, s_handle->field_ptr->m_wks_idx,
1906 s_handle->field_ptr->m_ptr_name, s_handle->field_ptr->m_len_name, s_handle->field_ptr->m_ptr_value,
1907 s_handle->field_ptr->m_len_value, 0, 0, true);
1908
1909 if (dest_attached) {
1910 mime_hdr_field_attach(d_handle->mh, d_handle->field_ptr, 1, nullptr);
1911 }
1912 return TS_SUCCESS;
1913}
1914
1915TSReturnCode
1916TSMimeHdrFieldClone(TSMBuffer dest_bufp, TSMLoc dest_hdr, TSMBuffer src_bufp, TSMLoc src_hdr, TSMLoc src_field, TSMLoc *locp)

Callers 4

modify_headerFunction · 0.85
add_headerFunction · 0.85
TSMimeHdrFieldCloneFunction · 0.85

Calls 9

sdk_sanity_check_mbufferFunction · 0.85
isWriteableFunction · 0.85
mime_hdr_field_detachFunction · 0.85
mime_hdr_field_attachFunction · 0.85
is_liveMethod · 0.80

Tested by 1