func: static dissect_http_udp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) http_conv_t * conv_data ; conv_data = get_http_conversation_data ( pinfo ); static http_conv_t get_http_conversation_data(packet_info *pinfo) conversation_t * conversation ; http_conv_t * conv_data ; conversation = find_or_create_conversation ( pinfo ); conv_data = conversation_get_proto_data ( conversation , proto_http ); if ( ! conv_data )  conv_data = se_alloc0 ( sizeof ( http_conv_t ) ); return conv_data ; dissect_http_message ( tvb , 0 , pinfo , tree , conv_data ); static dissect_http_message(tvbuff_t *tvb, int offset, packet_info proto_tree *tree, http_conv_t *conv_data) proto_tree * http_tree = NULL ; const guchar * line ; gint next_offset ; const guchar * linep , * lineend ; int first_linelen , linelen ; gboolean is_request_or_reply ; guchar c ; http_type_t http_type ; ReqRespDissector reqresp_dissector ; int colon_offset ; headers_t headers ; first_linelen = tvb_find_line_end ( tvb , offset , tvb_ensure_length_remaining ( tvb , offset ) , & next_offset , FALSE ); line = tvb_get_ptr ( tvb , offset , first_linelen ); http_type = HTTP_OTHERS; is_request_or_reply = is_http_request_or_reply ( ( const gchar * ) line , first_linelen , & http_type , NULL , conv_data ); if ( is_request_or_reply )  if ( ! req_resp_hdrs_do_reassembly ( tvb , offset , pinfo , http_desegment_headers , http_desegment_body ) )  if ( check_col ( pinfo -> cinfo , COL_INFO ) )  if ( is_request_or_reply )  line = tvb_get_ptr ( tvb , offset , first_linelen ); if ( tree )  ti = proto_tree_add_item ( tree , proto_http , tvb , offset , - 1 , ENC_NA ); http_tree = proto_item_add_subtree ( ti , ett_http ); http_type = HTTP_OTHERS; headers . content_type = NULL; headers . content_type_parameters = NULL; headers . have_content_length = FALSE; headers . content_length = 0; headers . content_encoding = NULL; headers . transfer_encoding = NULL; while ( tvb_reported_length_remaining ( tvb , offset ) != 0 )  linelen = tvb_find_line_end ( tvb , offset , tvb_ensure_length_remaining ( tvb , offset ) , & next_offset , FALSE ); if ( linelen < 0 )  line = tvb_get_ptr ( tvb , offset , linelen ); lineend = line + linelen; colon_offset = - 1; reqresp_dissector = NULL; is_request_or_reply = is_http_request_or_reply ( ( const gchar * ) line , linelen , & http_type , & reqresp_dissector , conv_data ); if ( is_request_or_reply )  if ( linelen == 0 )  linep = line; colon_offset = offset; while ( linep < lineend )  c = * linep ++; if ( ! isascii ( c ) )  if ( iscntrl ( c ) )  switch ( c )  colon_offset ++; if ( linelen == 0 )  if ( is_request_or_reply )  process_header ( tvb , offset , next_offset , line , linelen , colon_offset , pinfo , http_tree , & headers , conv_data ); offset = next_offset; static process_header(tvbuff_t *tvb, int offset, int const guchar *line, int linelen, int packet_info *pinfo, proto_tree *tree, headers_t http_conv_t *conv_data) int len ; int line_end_offset ; int header_len ; gint hf_index ; guchar c ; int value_offset ; int value_len ; char * value ; proto_item * hdr_item ; len = next_offset - offset; line_end_offset = offset + linelen; header_len = colon_offset - offset; hf_index = find_header_hf_value ( tvb , offset , header_len ); value_offset = colon_offset + 1; while ( value_offset < line_end_offset && ( ( c = line [ value_offset - offset ] ) == ' ' || c == '\t' ) )  value_offset ++; value_len = line_end_offset - value_offset; value = ep_strndup ( & line [ value_offset - offset ] , value_len ); if ( hf_index == - 1 )  if ( tree )  header_field_info * hfinfo ; guint32 tmp ; hfinfo = proto_registrar_get_nth ( * headers [ hf_index ] . hf ); switch ( hfinfo -> type )  tmp = strtol ( value , NULL , 10 ); hdr_item = proto_tree_add_uint ( tree , * headers [ hf_index ] . hf , tvb , offset , len , tmp ); hdr_item = proto_tree_add_string_format ( tree , * headers [ hf_index ] . hf , tvb , offset , len , value , "%s" , format_text ( line , len ) ); hdr_item = NULL; switch ( headers [ hf_index ] . special )  if ( check_auth_ntlmssp ( hdr_item , tvb , pinfo , value ) )  static check_auth_ntlmssp(proto_item *hdr_item, tvbuff_t *tvb, packet_info gchar *value) static const char * ntlm_headers [ ] = { "NTLM " , "Negotiate " , NULL } ; const char * * header ; size_t hdrlen ; for (header = &ntlm_headers[0]; *header != NULL; header++) hdrlen = strlen ( * header ); if ( strncmp ( value , * header , hdrlen ) == 0 )  value += hdrlen; dissect_http_ntlmssp ( tvb , pinfo , hdr_tree , value ); 