Code Review
/
vpp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
tcp: state machine improvements
[vpp.git]
/
src
/
vnet
/
session
/
session.c
diff --git
a/src/vnet/session/session.c
b/src/vnet/session/session.c
index
991bcd5
..
843d474
100644
(file)
--- a/
src/vnet/session/session.c
+++ b/
src/vnet/session/session.c
@@
-98,9
+98,9
@@
session_enqueue_chain_tail (stream_session_t * s, vlib_buffer_t * b,
u32 offset, u8 is_in_order)
{
vlib_buffer_t *chain_b;
u32 offset, u8 is_in_order)
{
vlib_buffer_t *chain_b;
- u32 chain_bi = b->next_buffer;
+ u32 chain_bi = b->next_buffer
, len
;
vlib_main_t *vm = vlib_get_main ();
vlib_main_t *vm = vlib_get_main ();
- u8 *data
, len
;
+ u8 *data;
u16 written = 0;
int rv = 0;
u16 written = 0;
int rv = 0;
@@
-226,7
+226,7
@@
u32
stream_session_tx_fifo_max_dequeue (transport_connection_t * tc)
{
stream_session_t *s = stream_session_get (tc->s_index, tc->thread_index);
stream_session_tx_fifo_max_dequeue (transport_connection_t * tc)
{
stream_session_t *s = stream_session_get (tc->s_index, tc->thread_index);
- if (
s->session_state != SESSION_STATE_READY
)
+ if (
!s->server_tx_fifo
)
return 0;
return svm_fifo_max_dequeue (s->server_tx_fifo);
}
return 0;
return svm_fifo_max_dequeue (s->server_tx_fifo);
}
@@
-266,7
+266,13
@@
stream_session_enqueue_notify (stream_session_t * s, u8 block)
return 0;
/* Get session's server */
return 0;
/* Get session's server */
- app = application_get (s->app_index);
+ app = application_get_if_valid (s->app_index);
+
+ if (PREDICT_FALSE (app == 0))
+ {
+ clib_warning ("invalid s->app_index = %d", s->app_index);
+ return 0;
+ }
/* Built-in server? Hand event to the callback... */
if (app->cb_fns.builtin_server_rx_callback)
/* Built-in server? Hand event to the callback... */
if (app->cb_fns.builtin_server_rx_callback)
@@
-327,8
+333,9
@@
session_manager_flush_enqueue_events (u32 thread_index)
stream_session_t *s0;
/* Get session */
stream_session_t *s0;
/* Get session */
- s0 = stream_session_get (session_indices_to_enqueue[i], thread_index);
- if (stream_session_enqueue_notify (s0, 0 /* don't block */ ))
+ s0 = stream_session_get_if_valid (session_indices_to_enqueue[i],
+ thread_index);
+ if (s0 == 0 || stream_session_enqueue_notify (s0, 0 /* don't block */ ))
{
errors++;
}
{
errors++;
}
@@
-366,7
+373,7
@@
stream_session_connect_notify (transport_connection_t * tc, u8 is_fail)
application_t *app;
stream_session_t *new_s = 0;
u64 handle;
application_t *app;
stream_session_t *new_s = 0;
u64 handle;
- u32
api_context
= 0;
+ u32
opaque
= 0;
int error = 0;
handle = stream_session_half_open_lookup_handle (&tc->lcl_ip, &tc->rmt_ip,
int error = 0;
handle = stream_session_half_open_lookup_handle (&tc->lcl_ip, &tc->rmt_ip,
@@
-378,9
+385,11
@@
stream_session_connect_notify (transport_connection_t * tc, u8 is_fail)
return -1;
}
return -1;
}
- /* Get the app's index from the handle we stored when opening connection */
+ /* Get the app's index from the handle we stored when opening connection
+ * and the opaque (api_context for external apps) from transport session
+ * index*/
app = application_get (handle >> 32);
app = application_get (handle >> 32);
-
api_context
= tc->s_index;
+
opaque
= tc->s_index;
if (!is_fail)
{
if (!is_fail)
{
@@
-399,7
+408,7
@@
stream_session_connect_notify (transport_connection_t * tc, u8 is_fail)
}
/* Notify client application */
}
/* Notify client application */
- if (app->cb_fns.session_connected_callback (app->index,
api_context
, new_s,
+ if (app->cb_fns.session_connected_callback (app->index,
opaque
, new_s,
is_fail))
{
clib_warning ("failed to notify app");
is_fail))
{
clib_warning ("failed to notify app");