On Tue, 2010-09-21 at 15:07 -0300, Alex Baule wrote: > static void filter_callback(struct message_header_line *hdr, > bool *matched, void *context ATTR_UNUSED) .. > What i try to understand is how the structs work, it's save the entire > header or every line from header call the callback function ?
The function is called once for each header field and depending on *matched value after the call it's either filtered out or not. > hdr->name_offset is the size of elements in the struct ? (like a array of > message_header_line) I don't really know what name_offset contains in this case, probably nothing useful, don't use it. hdr->name, hdr->value and hdr->value_len are the only things you should need. > The void *context ATTR_UNUSED i can pass what i want to change ? like a > pointer to a variable ? The context pointer contains the same pointer you gave to i_stream_create_header_filter(). So for example you could do something like: char *value = NULL; i_stream_create_header_filter(..., &value); static void filter_callback(struct message_header_line *hdr, bool *matched, void *context) { char **value = context; if (strcmp(hdr, "yourheader") == 0 && *value == NULL) *value = i_strndup(hdr->value, hdr->value_len); }