<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">when I read the
code of app layer proto detect and app layer proto register in suricata,I think
the codes of proto detect should be moved into parser register, so we only need to care the proto pattern which to be registered,</span></p><p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">the app layer
pattern and app layer proto to be registered should be defined in conf file,like
the following(currently the init and register are hard coded)</span></p>

<p class="MsoNormal"><span lang="EN-US">file app-layer-proto-pattern.conf</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">#Example of
app-layer pattern</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">App-proto:http</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">Ip-proto:tcp</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">App-proto-pattern:
"GET|20|"</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">Depth:4</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">Offset:0</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">Direction:toserver<span style="">   </span>#value like toserver,toclient</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US"> </span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">App-proto:ftp</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">Ip-proto:tcp</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">App-proto-pattern:
"USER "</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">Depth:5</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">Offset:0</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">Direction:toserver<span style="">   </span>#value like toserver,toclient</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US"> </span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US"> </span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">App layer Proto line in
suricata.yaml</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">Decode-app-layer-proto:http,ftp,ssl,smb,rpc,ssl,ssh,tns,tds,telnet,msn,icq</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US"> </span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">The app layer proto
listed above shoud be registered,otherwise NOT registed</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">To map app layer
proto name and ID,shoud<span style="">  </span>add data type in
app-layer-protos.h</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US"> </span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">typedef struct
_alp_proto_conf_t{</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US"><span style="">         </span>u_int16_t proto_id;</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US"><span style="">         </span>char * proto_name;</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">}al_proto_conf_t;</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US"> </span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">al_proto_conf_t
al_proto_conf[ALPROTO_MAX]= {</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">{ALPROTO_UNKNOWN,"unknown"},</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">{ALPROTO_HTTP,"http"}</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">………</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">{ ALPROTO_DCERPC_UDP,”dcerpc-udp”}</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US">};</span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US"> </span></p>

<p class="MsoNormal" style="text-indent: 21pt;"><span lang="EN-US"> so the app proto init becoms part of app layer ptoto register and proto pattern and proto selected to be register become </span><font size="-1">flexibility.<br>
</font></p>