| 1866 | } |
| 1867 | |
| 1868 | TSReturnCode |
| 1869 | TSMimeHdrFieldCopy(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 | |
| 1915 | TSReturnCode |
| 1916 | TSMimeHdrFieldClone(TSMBuffer dest_bufp, TSMLoc dest_hdr, TSMBuffer src_bufp, TSMLoc src_hdr, TSMLoc src_field, TSMLoc *locp) |