mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 14:48:21 +00:00
binpac: Apply bits of nadi-bittorrent patch that aren't applied
This commit is contained in:
parent
090325df40
commit
dd3737b5c8
3 changed files with 9 additions and 184 deletions
|
@ -1,171 +0,0 @@
|
||||||
Index: src/pac_type.h
|
|
||||||
===================================================================
|
|
||||||
--- src/pac_type.h (revision 4130)
|
|
||||||
+++ src/pac_type.h (working copy)
|
|
||||||
@@ -78,12 +78,6 @@
|
|
||||||
string EvalByteOrder(Output *out_cc, Env *env) const;
|
|
||||||
|
|
||||||
virtual string EvalMember(const ID *member_id) const;
|
|
||||||
-#if 0
|
|
||||||
- // member_env() is used for finding a member of the type.
|
|
||||||
- // Thus member_env() of a ParameterizedType should return
|
|
||||||
- // ReferredDataType()->env()
|
|
||||||
- // virtual Env *member_env() const;
|
|
||||||
-#endif
|
|
||||||
|
|
||||||
// The variable defined by the type
|
|
||||||
const ID *value_var() const { return value_var_; }
|
|
||||||
@@ -223,6 +217,8 @@
|
|
||||||
|
|
||||||
virtual bool ByteOrderSensitive() const = 0;
|
|
||||||
|
|
||||||
+ bool NeedsBufferingStateVar() const;
|
|
||||||
+
|
|
||||||
void GenBufferingLoop(Output* out_cc, Env* env, int flags);
|
|
||||||
void GenParseBuffer(Output* out_cc, Env* env, int flags);
|
|
||||||
void GenParseCode2(Output* out_cc, Env* env, const DataPtr& data, int flags);
|
|
||||||
Index: lib/binpac_buffer.h
|
|
||||||
===================================================================
|
|
||||||
--- lib/binpac_buffer.h (revision 4130)
|
|
||||||
+++ lib/binpac_buffer.h (working copy)
|
|
||||||
@@ -24,18 +24,18 @@
|
|
||||||
void DiscardData();
|
|
||||||
|
|
||||||
// Whether there is enough data for the frame
|
|
||||||
- bool ready() const{ return message_complete_; }
|
|
||||||
+ bool ready() const{ return message_complete_ || mode_ == UNKNOWN_MODE; }
|
|
||||||
|
|
||||||
inline const_byteptr begin() const
|
|
||||||
{
|
|
||||||
- BINPAC_ASSERT(message_complete_);
|
|
||||||
+ BINPAC_ASSERT(ready());
|
|
||||||
return ( buffer_n_ == 0 ) ?
|
|
||||||
orig_data_begin_ : buffer_;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline const_byteptr end() const
|
|
||||||
{
|
|
||||||
- BINPAC_ASSERT(message_complete_);
|
|
||||||
+ BINPAC_ASSERT(ready());
|
|
||||||
if ( buffer_n_ == 0 )
|
|
||||||
{
|
|
||||||
BINPAC_ASSERT(frame_length_ >= 0);
|
|
||||||
Index: src/pac_type.cc
|
|
||||||
===================================================================
|
|
||||||
--- src/pac_type.cc (revision 4130)
|
|
||||||
+++ src/pac_type.cc (working copy)
|
|
||||||
@@ -285,9 +285,8 @@
|
|
||||||
parsing_complete_var, extern_type_bool->Clone());
|
|
||||||
parsing_complete_var_field_->Prepare(env);
|
|
||||||
|
|
||||||
- if ( ( buffer_mode() == BUFFER_BY_LENGTH ||
|
|
||||||
- buffer_mode() == BUFFER_BY_LINE ) &&
|
|
||||||
- ! env->GetDataType(buffering_state_id) )
|
|
||||||
+ if ( NeedsBufferingStateVar() &&
|
|
||||||
+ !env->GetDataType(buffering_state_id) )
|
|
||||||
{
|
|
||||||
buffering_state_var_field_ = new PrivVarField(
|
|
||||||
buffering_state_id->clone(),
|
|
||||||
@@ -387,17 +386,17 @@
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BUFFER_BY_LENGTH:
|
|
||||||
- if ( buffering_state_var_field_ )
|
|
||||||
- {
|
|
||||||
- out_cc->println("if ( %s == 0 )",
|
|
||||||
- env->RValue(buffering_state_id));
|
|
||||||
- out_cc->inc_indent();
|
|
||||||
- out_cc->println("{");
|
|
||||||
- }
|
|
||||||
+ if ( !NeedsBufferingStateVar() )
|
|
||||||
+ break;
|
|
||||||
|
|
||||||
+ ASSERT(env->GetDataType(buffering_state_id));
|
|
||||||
+ out_cc->println("if ( %s == 0 )",
|
|
||||||
+ env->RValue(buffering_state_id));
|
|
||||||
+ out_cc->inc_indent();
|
|
||||||
+ out_cc->println("{");
|
|
||||||
+
|
|
||||||
if ( attr_length_expr_ )
|
|
||||||
{
|
|
||||||
- // frame_buffer_arg = attr_length_expr_->EvalExpr(out_cc, env);
|
|
||||||
frame_buffer_arg = strfmt("%d", InitialBufferLength());
|
|
||||||
}
|
|
||||||
else if ( attr_restofflow_ )
|
|
||||||
@@ -407,7 +406,7 @@
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
- frame_buffer_arg = strfmt("%d", InitialBufferLength());
|
|
||||||
+ ASSERT(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
out_cc->println("%s->NewFrame(%s, %s);",
|
|
||||||
@@ -415,16 +414,14 @@
|
|
||||||
frame_buffer_arg.c_str(),
|
|
||||||
attr_chunked() ? "true" : "false");
|
|
||||||
|
|
||||||
- if ( buffering_state_var_field_ )
|
|
||||||
- {
|
|
||||||
- out_cc->println("%s = 1;",
|
|
||||||
- env->LValue(buffering_state_id));
|
|
||||||
- out_cc->println("}");
|
|
||||||
- out_cc->dec_indent();
|
|
||||||
- }
|
|
||||||
+ out_cc->println("%s = 1;",
|
|
||||||
+ env->LValue(buffering_state_id));
|
|
||||||
+ out_cc->println("}");
|
|
||||||
+ out_cc->dec_indent();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BUFFER_BY_LINE:
|
|
||||||
+ ASSERT(env->GetDataType(buffering_state_id));
|
|
||||||
out_cc->println("if ( %s == 0 )",
|
|
||||||
env->RValue(buffering_state_id));
|
|
||||||
out_cc->inc_indent();
|
|
||||||
@@ -890,6 +887,25 @@
|
|
||||||
return ! attr_byteorder_expr() && ByteOrderSensitive();
|
|
||||||
}
|
|
||||||
|
|
||||||
+bool Type::NeedsBufferingStateVar() const
|
|
||||||
+ {
|
|
||||||
+ if ( !incremental_input() )
|
|
||||||
+ return false;
|
|
||||||
+ switch ( buffer_mode() )
|
|
||||||
+ {
|
|
||||||
+ case BUFFER_NOTHING:
|
|
||||||
+ case NOT_BUFFERABLE:
|
|
||||||
+ return false;
|
|
||||||
+ case BUFFER_BY_LINE:
|
|
||||||
+ return true;
|
|
||||||
+ case BUFFER_BY_LENGTH:
|
|
||||||
+ return ( attr_length_expr_ || attr_restofflow_ );
|
|
||||||
+ default:
|
|
||||||
+ ASSERT(0);
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
bool Type::DoTraverse(DataDepVisitor *visitor)
|
|
||||||
{
|
|
||||||
foreach (i, FieldList, fields_)
|
|
||||||
Index: src/pac_flow.cc
|
|
||||||
===================================================================
|
|
||||||
--- src/pac_flow.cc (revision 4130)
|
|
||||||
+++ src/pac_flow.cc (working copy)
|
|
||||||
@@ -224,15 +224,13 @@
|
|
||||||
out_cc->println("catch ( Exception const &e )");
|
|
||||||
out_cc->inc_indent();
|
|
||||||
out_cc->println("{");
|
|
||||||
- out_cc->println("DEBUG_MSG(\"%%.6f binpac exception: %%s\\n\", network_time(), e.c_msg());");
|
|
||||||
GenCleanUpCode(out_cc);
|
|
||||||
if ( dataunit_->type() == AnalyzerDataUnit::FLOWUNIT )
|
|
||||||
{
|
|
||||||
out_cc->println("%s->DiscardData();",
|
|
||||||
env_->LValue(flow_buffer_id));
|
|
||||||
- out_cc->println("BINPAC_ASSERT(!%s->ready());",
|
|
||||||
- env_->RValue(flow_buffer_id));
|
|
||||||
}
|
|
||||||
+ out_cc->println("throw e;");
|
|
||||||
out_cc->println("}");
|
|
||||||
out_cc->dec_indent();
|
|
|
@ -217,7 +217,7 @@ void FlowDecl::GenProcessFunc(Output* out_h, Output* out_cc)
|
||||||
{
|
{
|
||||||
out_cc->println("%s->DiscardData();", env_->LValue(flow_buffer_id));
|
out_cc->println("%s->DiscardData();", env_->LValue(flow_buffer_id));
|
||||||
}
|
}
|
||||||
out_cc->println("throw;");
|
out_cc->println("throw e;");
|
||||||
out_cc->println("}");
|
out_cc->println("}");
|
||||||
out_cc->dec_indent();
|
out_cc->dec_indent();
|
||||||
|
|
||||||
|
|
|
@ -393,12 +393,10 @@ void Type::GenBufferConfiguration(Output* out_cc, Env* env)
|
||||||
if ( ! NeedsBufferingStateVar() )
|
if ( ! NeedsBufferingStateVar() )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if ( buffering_state_var_field_ )
|
ASSERT(env->GetDataType(buffering_state_id));
|
||||||
{
|
out_cc->println("if ( %s == 0 )", env->RValue(buffering_state_id));
|
||||||
out_cc->println("if ( %s == 0 )", env->RValue(buffering_state_id));
|
out_cc->inc_indent();
|
||||||
out_cc->inc_indent();
|
out_cc->println("{");
|
||||||
out_cc->println("{");
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( attr_length_expr_ )
|
if ( attr_length_expr_ )
|
||||||
{
|
{
|
||||||
|
@ -418,15 +416,13 @@ void Type::GenBufferConfiguration(Output* out_cc, Env* env)
|
||||||
out_cc->println("%s->NewFrame(%s, %s);", env->LValue(flow_buffer_id),
|
out_cc->println("%s->NewFrame(%s, %s);", env->LValue(flow_buffer_id),
|
||||||
frame_buffer_arg.c_str(), attr_chunked() ? "true" : "false");
|
frame_buffer_arg.c_str(), attr_chunked() ? "true" : "false");
|
||||||
|
|
||||||
if ( buffering_state_var_field_ )
|
out_cc->println("%s = 1;", env->LValue(buffering_state_id));
|
||||||
{
|
out_cc->println("}");
|
||||||
out_cc->println("%s = 1;", env->LValue(buffering_state_id));
|
out_cc->dec_indent();
|
||||||
out_cc->println("}");
|
|
||||||
out_cc->dec_indent();
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BUFFER_BY_LINE:
|
case BUFFER_BY_LINE:
|
||||||
|
ASSERT(env->GetDataType(buffering_state_id));
|
||||||
out_cc->println("if ( %s == 0 )", env->RValue(buffering_state_id));
|
out_cc->println("if ( %s == 0 )", env->RValue(buffering_state_id));
|
||||||
out_cc->inc_indent();
|
out_cc->inc_indent();
|
||||||
out_cc->println("{");
|
out_cc->println("{");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue