@@ -46,6 +46,9 @@ class LogStash::Filters::SIP < LogStash::Filters::Base
4646 # An array specifying the headers/values to not add to the event
4747 config :exclude_keys , :validate => :array , :default => [ ]
4848
49+ # A regex to validate headers
50+ config :header_regex , :validate => :string , :default => '.*'
51+
4952 class InvalidURIError < StandardError ; end
5053
5154 public
@@ -97,7 +100,7 @@ def parse_uri(name, text)
97100 return parts
98101 end
99102
100- def parse ( text , fields )
103+ def parse ( event_id , text , fields )
101104 # replace "\r\n" for new-lines, and strip leading whitespace
102105 text = text . gsub ( "\r \n " , "\n " )
103106 # replace ^M for new-lines, and strip leading whitespace
@@ -131,13 +134,14 @@ def parse(text, fields)
131134 end
132135
133136 # process the headers (name : value)
137+ header_regex = Regexp . new ( @header_regex )
134138 if parts . length > 1
135139 fields [ 'headers' ] = parts [ 1 ]
136140 headers = parts [ 1 ] . split ( "\n " )
137141 headers . each do |header |
138142 name , value = header . split ( ':' , 2 )
139- if name . nil? || value . nil?
140- @logger . debug? and @logger . debug ( "invalid header: <#{ header } >" )
143+ if ! ( header_regex . match ( header ) ) || name . nil? || value . nil?
144+ @logger . warn ( "invalid header in #{ event_id } : <#{ header } >" )
141145 next
142146 end
143147 name = name . strip . downcase . gsub ( '-' , '_' )
@@ -156,20 +160,21 @@ def parse(text, fields)
156160 end
157161 end
158162 #print "SIP fields: ", fields, "\n"
159- @logger . debug? and @logger . debug ( "SIP fields " , fields )
163+ @logger . debug? and @logger . debug ( "SIP fields for #{ event_id } " , fields )
160164 end
161165
162166 public
163167 def filter ( event )
164168 fields = Hash . new
165169 value = event . get ( @source )
170+ event_id = event . get ( '_id' )
166171
167172 case value
168173 when nil
169174 # Nothing to do
170175 when String
171176 begin
172- parse ( value , fields )
177+ parse ( event_id , value , fields )
173178 rescue => e
174179 event . tag ( "_sipparsefailure" )
175180 @logger . error ( "Failed to parse SIP message (#{ e . backtrace . first } : #{ e . message } / #{ e . class } )" , :value => value )
0 commit comments