GNU
|
Liberty Eiffel
|
Automated Tests
|
Wiki
|
Savannah project
|
Debian packages
|
Documentation
>
libraries
>
HTTP_CONNECTION
+
Point of view
All features
ANY
JOB
LOOP_ITEM
SERVER
RECYCLING_POOL
HTTP_SERVER
All features
deferred class HTTP_CONNECTION
Summary
top
Handle one connection to the
HTTP_SERVER
. The real HTTP protocol is defined here.
Direct parents
Inherit list:
CONNECTION
Insert list:
DISPOSABLE
,
RECYCLABLE
Class invariant
top
request_line
/= Void
priority /= Minimum_integer
Overview
top
Features
{
LOOP_ITEM
}
prepare
(events:
EVENTS_SET
)
Use
events
to describe condition that make this job ready to
continue
.
is_ready
(events:
EVENTS_SET
):
BOOLEAN
Check if this job is ready to continue his work.
done
:
BOOLEAN
done
returns
True
when the job is finished.
continue
Continue to do the job.
{}
answer_state
:
INTEGER_32
answer_state_read
:
INTEGER_32
answer_state_prepare
:
INTEGER_32
answer_state_write
:
INTEGER_32
read_buffer
:
STRING
content_length
:
INTEGER_32
content_count
:
INTEGER_32
{
HTTP_SERVER
}
set_server
(a_server:
HTTP_SERVER
)
{
SERVER
}
set_io
(a_io:
SOCKET_INPUT_OUTPUT_STREAM
)
{}
server
:
HTTP_SERVER
handle_disconnect
(a_io:
SOCKET_INPUT_OUTPUT_STREAM
)
The HTTP protocol (see RFC 2616)
{}
state
:
INTEGER_32
state_request_line
:
INTEGER_32
state_header
:
INTEGER_32
state_body
:
INTEGER_32
method_handler
:
HTTP_METHOD_HANDLER
request_line
:
STRING
call_state
a_request_line
(line:
STRING
)
a_header
(line:
STRING
)
header_key
:
STRING
header_value
:
STRING
parse_header
(line:
STRING
)
a_body
(line:
STRING
)
{}
get_method_handler
(method:
STRING
, uri:
STRING
, version:
STRING
):
HTTP_METHOD_HANDLER
disconnected
:
BOOLEAN
{
RECYCLING_POOL
}
recycle
Do whatever needs to be done to free resources or recycle other objects when recycling this one
{}
dispose
Action to be executed just before garbage collection reclaims an object.
{
LOOP_ITEM
}
restart
Configure the job like in its initial state.
{}
ios
:
SOCKET_INPUT_OUTPUT_STREAM
{
JOB
,
LOOP_ITEM
}
priority
:
INTEGER_32
never change a job's priority after inserting it in loop_item.
{
LOOP_ITEM
}
infix "<"
(other:
JOB
):
BOOLEAN
Maximum:
{}
Maximum_character_code
:
INTEGER_16
Largest supported code for
CHARACTER
values.
Maximum_integer_8
:
INTEGER_8
Largest supported value of type
INTEGER_8
.
Maximum_integer_16
:
INTEGER_16
Largest supported value of type
INTEGER_16
.
Maximum_integer
:
INTEGER_32
Largest supported value of type INTEGER/
INTEGER_32
.
Maximum_integer_32
:
INTEGER_32
Largest supported value of type INTEGER/
INTEGER_32
.
Maximum_integer_64
:
INTEGER_64
Largest supported value of type
INTEGER_64
.
Maximum_real_32
:
REAL_32
Largest non-special (no NaNs nor infinity) supported value of type
REAL_32
.
Maximum_real
:
REAL_64
Largest non-special (no NaNs nor infinity) supported value of type REAL.
Maximum_real_64
:
REAL_64
Largest non-special (no NaNs nor infinity) supported value of type REAL.
Maximum_real_80
:
REAL_EXTENDED
Largest supported value of type
REAL_80
.
Minimum:
{}
Minimum_character_code
:
INTEGER_16
Smallest supported code for
CHARACTER
values.
Minimum_integer_8
:
INTEGER_8
Smallest supported value of type
INTEGER_8
.
Minimum_integer_16
:
INTEGER_16
Smallest supported value of type
INTEGER_16
.
Minimum_integer
:
INTEGER_32
Smallest supported value of type INTEGER/
INTEGER_32
.
Minimum_integer_32
:
INTEGER_32
Smallest supported value of type INTEGER/
INTEGER_32
.
Minimum_integer_64
:
INTEGER_64
Smallest supported value of type
INTEGER_64
.
Minimum_real_32
:
REAL_32
Smallest non-special (no NaNs nor infinity) supported value of type
REAL_32
.
Minimum_real
:
REAL_64
Smallest non-special (no NaNs nor infinity) supported value of type REAL.
Minimum_real_64
:
REAL_64
Smallest non-special (no NaNs nor infinity) supported value of type REAL.
Minimum_real_80
:
REAL_64
Smallest supported value of type
REAL_80
.
Bits:
{}
Boolean_bits
:
INTEGER_32
Number of bits in a value of type
BOOLEAN
.
Character_bits
:
INTEGER_32
Number of bits in a value of type
CHARACTER
.
Integer_bits
:
INTEGER_32
Number of bits in a value of type INTEGER.
Real_bits
:
INTEGER_32
Number of bits in a value of type REAL.
Pointer_bits
:
INTEGER_32
Number of bits in a value of type
POINTER
.
prepare
(events:
EVENTS_SET
)
effective procedure
{
LOOP_ITEM
}
top
Use
events
to describe condition that make this job ready to
continue
.
events
describe the conditions to be satisfied before running this job for one more step.
require
events /= Void
not events.queryable
not done
is_ready
(events:
EVENTS_SET
):
BOOLEAN
effective function
{
LOOP_ITEM
}
top
Check if this job is ready to continue his work.
events
describe the events which occurred.
require
events /= Void
events.queryable
not done
done
:
BOOLEAN
effective function
{
LOOP_ITEM
}
top
done
returns
True
when the job is finished.
Then the job may be
restart
(ed) if it needs to run again.
continue
effective procedure
{
LOOP_ITEM
}
top
Continue to do the job.
The work to do has to be small work and non blocking, it will continue on next call.
require
not done
answer_state
:
INTEGER_32
writable attribute
{}
top
answer_state_read
:
INTEGER_32
is 0
constant attribute
{}
top
answer_state_prepare
:
INTEGER_32
is 1
constant attribute
{}
top
answer_state_write
:
INTEGER_32
is 2
constant attribute
{}
top
read_buffer
:
STRING
writable attribute
{}
top
content_length
:
INTEGER_32
writable attribute
{}
top
content_count
:
INTEGER_32
writable attribute
{}
top
set_server
(a_server:
HTTP_SERVER
)
effective procedure
{
HTTP_SERVER
}
top
set_io
(a_io:
SOCKET_INPUT_OUTPUT_STREAM
)
effective procedure
{
SERVER
}
top
require
a_io.is_connected
ensure
ios = a_io
server
:
HTTP_SERVER
writable attribute
{}
top
handle_disconnect
(a_io:
SOCKET_INPUT_OUTPUT_STREAM
)
effective procedure
{}
top
require
a_io =
ios
done
state
:
INTEGER_32
writable attribute
{}
top
state_request_line
:
INTEGER_32
is 0
constant attribute
{}
top
state_header
:
INTEGER_32
is 1
constant attribute
{}
top
state_body
:
INTEGER_32
is 2
constant attribute
{}
top
method_handler
:
HTTP_METHOD_HANDLER
writable attribute
{}
top
request_line
:
STRING
writable attribute
{}
top
call_state
effective procedure
{}
top
require
answer_state
=
answer_state_read
a_request_line
(line:
STRING
)
effective procedure
{}
top
require
answer_state
=
answer_state_read
a_header
(line:
STRING
)
effective procedure
{}
top
header_key
:
STRING
writable attribute
{}
top
header_value
:
STRING
writable attribute
{}
top
parse_header
(line:
STRING
)
effective procedure
{}
top
a_body
(line:
STRING
)
effective procedure
{}
top
get_method_handler
(method:
STRING
, uri:
STRING
, version:
STRING
):
HTTP_METHOD_HANDLER
deferred function
{}
top
require
method.as_upper.is_equal(method)
ensure
Result.method.is_equal(method) or else Result
disconnected
:
BOOLEAN
writable attribute
{}
top
recycle
effective procedure
{
RECYCLING_POOL
}
top
Do whatever needs to be done to free resources or recycle other objects when recycling this one
dispose
effective procedure
{}
top
Action to be executed just before garbage collection reclaims an object.
restart
effective procedure
{
LOOP_ITEM
}
top
Configure the job like in its initial state.
Example: when some window dialog appears a second time, all jobs from this window are restarted.
require
done
ensure
not done
ios
:
SOCKET_INPUT_OUTPUT_STREAM
writable attribute
{}
top
priority
:
INTEGER_32
writable attribute
{
JOB
,
LOOP_ITEM
}
top
never change a job's priority after inserting it in loop_item.
Priority should only be set at creation time.
infix "<"
(other:
JOB
):
BOOLEAN
effective function
{
LOOP_ITEM
}
top
Maximum_character_code
:
INTEGER_16
{}
top
Largest supported code for
CHARACTER
values.
ensure
meaningful:
Result >= 127
Maximum_integer_8
:
INTEGER_8
is 127
constant attribute
{}
top
Largest supported value of type
INTEGER_8
.
Maximum_integer_16
:
INTEGER_16
is 32767
constant attribute
{}
top
Largest supported value of type
INTEGER_16
.
Maximum_integer
:
INTEGER_32
is 2147483647
constant attribute
{}
top
Largest supported value of type INTEGER/
INTEGER_32
.
Maximum_integer_32
:
INTEGER_32
is 2147483647
constant attribute
{}
top
Largest supported value of type INTEGER/
INTEGER_32
.
Maximum_integer_64
:
INTEGER_64
is 9223372036854775807
constant attribute
{}
top
Largest supported value of type
INTEGER_64
.
Maximum_real_32
:
REAL_32
is {REAL_32 3.4028234663852885981170418348451692544e+38}
constant attribute
{}
top
Largest non-special (no NaNs nor infinity) supported value of type
REAL_32
.
Maximum_real
:
REAL_64
{}
top
Largest non-special (no NaNs nor infinity) supported value of type REAL.
Just to give an idea of this value: 1.79769313486231570....e+308
Maximum_real_64
:
REAL_64
{}
top
Largest non-special (no NaNs nor infinity) supported value of type REAL.
Just to give an idea of this value: 1.79769313486231570....e+308
Maximum_real_80
:
REAL_EXTENDED
{}
top
Largest supported value of type
REAL_80
.
ensure
meaningful:
Result >=
Maximum_real
Minimum_character_code
:
INTEGER_16
{}
top
Smallest supported code for
CHARACTER
values.
ensure
meaningful:
Result <= 0
Minimum_integer_8
:
INTEGER_8
is -128
constant attribute
{}
top
Smallest supported value of type
INTEGER_8
.
Minimum_integer_16
:
INTEGER_16
is -32768
constant attribute
{}
top
Smallest supported value of type
INTEGER_16
.
Minimum_integer
:
INTEGER_32
is -2147483648
constant attribute
{}
top
Smallest supported value of type INTEGER/
INTEGER_32
.
Minimum_integer_32
:
INTEGER_32
is -2147483648
constant attribute
{}
top
Smallest supported value of type INTEGER/
INTEGER_32
.
Minimum_integer_64
:
INTEGER_64
is -9223372036854775808
constant attribute
{}
top
Smallest supported value of type
INTEGER_64
.
Minimum_real_32
:
REAL_32
is {REAL_32 -3.40282346638528859811704183484516925440e+38}
constant attribute
{}
top
Smallest non-special (no NaNs nor infinity) supported value of type
REAL_32
.
Minimum_real
:
REAL_64
{}
top
Smallest non-special (no NaNs nor infinity) supported value of type REAL.
Just to give an idea of this value: -1.79769313486231570....e+308
Minimum_real_64
:
REAL_64
{}
top
Smallest non-special (no NaNs nor infinity) supported value of type REAL.
Just to give an idea of this value: -1.79769313486231570....e+308
Minimum_real_80
:
REAL_64
{}
top
Smallest supported value of type
REAL_80
.
ensure
meaningful:
Result <= 0.0
Boolean_bits
:
INTEGER_32
{}
top
Number of bits in a value of type
BOOLEAN
.
ensure
meaningful:
Result >= 1
Character_bits
:
INTEGER_32
{}
top
Number of bits in a value of type
CHARACTER
.
ensure
meaningful:
Result >= 1
large_enough:
{INTEGER_32 2} ^ Result >=
Maximum_character_code
Integer_bits
:
INTEGER_32
{}
top
Number of bits in a value of type INTEGER.
ensure
integer_definition:
Result = 32
Real_bits
:
INTEGER_32
is 64
constant attribute
{}
top
Number of bits in a value of type REAL.
Pointer_bits
:
INTEGER_32
{}
top
Number of bits in a value of type
POINTER
.